2008-11-11 151 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引用靜態變量。