如何将 pimpl-idiom 实例从 child 传递到 parent?
How to pass a pimpl-idiom instance from child to parent?
我有一个 parent class 和一个 child class 有一个 Pimpl class 实现。
我想在 child class 中创建一个 pimpl 的实例,并通过 child 的构造函数将其传递给 parent 到 [=32= 的构造函数].
我尝试创建一个 parent 的构造函数,它将 impl class 作为参数,然后从 child.
的构造函数调用这个构造函数
//ParentInterface.h
class impl; // error message is here after I add the constructor with parameter
class ParentInterface {
public:
ParentInterface();
ParentInterface(impl *pimpl);
virtual ~ParentInterface();
ParentInterface(const ParentInterface& orig);
private:
class impl;
impl* pimpl;
};
//ParentInterface.cpp
class ParentInterface::impl
{
public:
virtual ~impl(){}
MLB_API temp[1];
private:
};
ParentInterface::ParentInterface():pimpl(new impl()){
}
ParentInterface::ParentInterface(impl *pimpl_){
pimpl = pimpl_;
}
ParentInterface::~ParentInterface() {
delete pimpl;
pimpl = NULL;
}
每当我添加采用 impl class 的构造函数时,第一行 class impl;
就会出错。以下几行是错误信息
changes meaning of ‘impl’ from ‘struct impl’
Unable to resolve forward declaration impl
编译器错误是由 2 个不同的 class impl
引起的:一个在全局范围内,另一个在 ParentInterface
中。 ParentInterface
构造函数接受全局 class impl
,而 ParentInterface::pimpl
是 class ParentInterface::impl
.
类型
要修复编译器错误,请删除全局 class impl
:
class ParentInterface {
protected: // Accessible to derived classes.
class impl;
impl* pimpl;
public:
ParentInterface();
ParentInterface(impl *pimpl);
~ParentInterface();
};
class ParentInterface::impl
{
public:
virtual ~impl() {}
};
ParentInterface::ParentInterface()
: pimpl(new impl)
{}
我有一个 parent class 和一个 child class 有一个 Pimpl class 实现。 我想在 child class 中创建一个 pimpl 的实例,并通过 child 的构造函数将其传递给 parent 到 [=32= 的构造函数].
我尝试创建一个 parent 的构造函数,它将 impl class 作为参数,然后从 child.
的构造函数调用这个构造函数//ParentInterface.h
class impl; // error message is here after I add the constructor with parameter
class ParentInterface {
public:
ParentInterface();
ParentInterface(impl *pimpl);
virtual ~ParentInterface();
ParentInterface(const ParentInterface& orig);
private:
class impl;
impl* pimpl;
};
//ParentInterface.cpp
class ParentInterface::impl
{
public:
virtual ~impl(){}
MLB_API temp[1];
private:
};
ParentInterface::ParentInterface():pimpl(new impl()){
}
ParentInterface::ParentInterface(impl *pimpl_){
pimpl = pimpl_;
}
ParentInterface::~ParentInterface() {
delete pimpl;
pimpl = NULL;
}
每当我添加采用 impl class 的构造函数时,第一行 class impl;
就会出错。以下几行是错误信息
changes meaning of ‘impl’ from ‘struct impl’
Unable to resolve forward declaration impl
编译器错误是由 2 个不同的 class impl
引起的:一个在全局范围内,另一个在 ParentInterface
中。 ParentInterface
构造函数接受全局 class impl
,而 ParentInterface::pimpl
是 class ParentInterface::impl
.
要修复编译器错误,请删除全局 class impl
:
class ParentInterface {
protected: // Accessible to derived classes.
class impl;
impl* pimpl;
public:
ParentInterface();
ParentInterface(impl *pimpl);
~ParentInterface();
};
class ParentInterface::impl
{
public:
virtual ~impl() {}
};
ParentInterface::ParentInterface()
: pimpl(new impl)
{}