Я бы хотел добиться чего-то вроде этого:
class Zot
{
namespace A
{
static int x;
static int y;
}
}
Я работаю с устаревшей системой, которая в значительной степени использует генерацию кода вне схемы БД, а некоторые поля представлены как методы / переменные в определении класса. Мне нужно добавить к этим классам несколько дополнительных статических переменных, и я хотел бы гарантировать отсутствие конфликтов с существующими именами.
Лучшее, что я придумал, - это использовать другую структуру для обертывания статики, как если бы это было пространство имен:
class Zot
{
struct A
{
static int x;
static int y;
}
}
Есть ли способ лучше?
Обновлять:
Дополнительным требованием является возможность доступа к ним из шаблона в другом месте.
например
template<class T>
class B
{
void foo() { return T::A::x; }
};
Так что поместить их в отдельный класс не получится.





На самом деле внутренняя структура - ваш лучший выбор. Другая возможность - использовать 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 ссылается на переменную экземпляра X в Zot, а Zot :: A :: x ссылается на статическую переменную.