2008-11-11 149 views
2

我希望能够实现这样的事情:命名空间(静态)成员变量

class Zot 
{ 
    namespace A 
    { 
     static int x; 
     static int y; 
    }  
} 

我与使用代码生成巨资掀起了DB模式的遗留系统的工作,和某些领域被暴露作为类定义中的方法/变量。我需要为这些类添加一些额外的静态变量,并希望保证与现有名称没有冲突。

我都拿出最好的是使用另一种结构来包装静,好像它是一个命名空间:

class Zot 
{ 
    struct A 
    { 
     static int x; 
     static int y; 
    }  
} 

有没有更好的办法?

更新:

一个额外的要求是要能够从其他地方模板

例如访问这些

template<class T> 
class B 
{ 
    void foo() { return T::A::x; } 
}; 

所以,把它们放在一个单独的类将无法正常工作

回答

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