我希望能够实现这样的目标:
class Zot
{
namespace A
{
static int x;
static int y;
}
}
我正在使用遗留系统,该系统在数据库模式中大量使用代码生成,并且某些字段在类定义中作为方法/变量公开。我需要为这些类添加一些额外的静态变量,并且希望保证不与现有名称发生冲突。
我提出的最好的方法是使用另一个结构来包装静态,就好像它是命名空间一样:
class Zot
{
struct A
{
static int x;
static int y;
}
}
有更好的方法吗?
更新
额外的要求是能够从其他地方的模板访问这些
e.g。
template<class T>
class B
{
void foo() { return T::A::x; }
};
所以将它们放在一个单独的类中是行不通的
答案 0 :(得分:3)
真正的内部结构是你最好的选择。另一种可能性是使用typedef来引入一类静态。这适用于代码生成,因为您可以将额外内容与生成的代码分开:
在生成的文件中,根本不关心Zot_statics中的内容:
class Zot_statics;
class Zot
{
public:
typedef Zot_statics A;
int x; // This is ok
};
在手动维护的标题中,当您需要访问x和y时:
class Zot_statics
{
public:
static int x;
static int y;
};
在手工维护的cpp文件中:
int Zot_statics::x;
int Zot_statics::y;
你的模板应该可以正常工作Zot::X
引用Zot上的实例变量X,Zot :: A :: x引用静态变量。