命名空间(静态)成员变量

时间:2008-11-11 16:43:33

标签: c++

我希望能够实现这样的目标:

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; }
};

所以将它们放在一个单独的类中是行不通的

1 个答案:

答案 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引用静态变量。