我正在尝试使用pimpl模式,并在匿名命名空间中定义实现类。这在C++中是可能的吗?下面描述了我的失败尝试。
如果不将实现移动到具有名称(或全局名称)的命名空间中,就可以修复这个问题吗?
class MyCalculatorImplementation;
class MyCalculator
{
public:
MyCalculator();
int CalculateStuff(int);
private:
MyCalculatorImplementation* pimpl;
};
namespace // If i omit the namespace, ev
在我创建的命名空间中,有一些函数在整个程序中使用。
在头文件中:
namespace NQueens
{
static int heur = 0;
int CalcHeuristic(char** state, int size);
void CalcHorzH(char ** state, int &heuristic, int size);
void CalcColH(char ** state, int &heuristic, int size);
void CalcDiagH(char ** state, int &heu
我从我的main.cpp中包含了两个头文件,它们在匿名命名空间中具有以下定义:使用g++版本4.9编译的const string strToken = ("%");,结果如下:
In file included from main.cpp:25:0:
libraries/trace.h:31:14: error: redefinition of ‘const string {anonymous}::strToken’
const string strToken = ("%");
^
In file included from lib
我被要求修改的一些代码看起来很像这样:
namespace XXX {
namespace {
// some stuff
} // end of unnamed
// Some stuff within the scope of XXX
} // end of XXX
我很难看到将未命名的命名空间嵌入到另一个命名空间中的好处,我正在考虑将其更改为:
namespace {
// some stuff
} // end of unnamed
namespace XXX {
// Some stuff within the scope of XXX
} // end of X