我正在尝试使用pimpl模式,并将实现类定义在匿名命名空间中。这在C++中可行吗?下面是我的失败尝试。
是否可以在不将实现移到具有名称的命名空间(或全局命名空间)的情况下解决此问题?
class MyCalculatorImplementation;
class MyCalculator
{
public:
MyCalculator();
int CalculateStuff(int);
private:
MyCalculatorImplementation* pimpl;
};
namespace // If i omit the namespace, everything is OK
{
class MyCalculatorImplementation
{
public:
int Calculate(int input)
{
// Insert some complicated calculation here
}
private:
int state[100];
};
}
// error C2872: 'MyCalculatorImplementation' : ambiguous symbol
MyCalculator::MyCalculator(): pimpl(new MyCalculatorImplementation)
{
}
int MyCalculator::CalculateStuff(int x)
{
return pimpl->Calculate(x);
}
Foo
,它还会导出类Foo::FooImpl
,而通常这不是你想要的... - Marc Mutz - mmutz__declspec(dllexport)
吗?如果是,我可能不需要担心。 - anatolyg__attribute__((visibility=default))
。 - Marc Mutz - mmutz