2008-11-11 3 views
2

Я хотел бы быть в состоянии достичь что-то вроде этого:Пространства имен (статические) переменные члены

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

Я работаю с устаревшей системой, которая использует генерацию кода сильно от БД схемы, и некоторые поля подвергаются как методы/переменные в определении класса. Мне нужно добавить несколько дополнительных статических переменных в эти классы и не желать никаких столкновений с существующими именами.

Лучшее, что я придумал, чтобы использовать другой-структуру, чтобы обернуть статику, как будто это пространство имен:

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

Есть ли лучший способ?

Update:

Дополнительное требование, чтобы иметь возможность получить к ним доступ из шаблона в другом месте

например

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

В заголовке ручной поддерживается когда вам нужно получить доступ к й и у:

class Zot_statics 
{ 
public: 
    static int x; 
    static int y; 
}; 

в ручном поддерживаются CPP файл:

int Zot_statics::x; 
int Zot_statics::y; 

И ваш шаблон должен отлично работать с Zot::X, ссылаясь на переменную экземпляра X на Zot и Zot :: A :: x ссылаясь на статическую переменную.

Смежные вопросы