I would like to be able to achieve something like this:
class Zot { namespace A { static int x; static int y; } }
I am working with a legacy system that uses code generation heavily off a DB schema, and certain fields are exposed as methods/variables in the class definition. I need to add a few extra static variables to these classes and would like to guarantee no clashes with the existing names.
The best I have come up with is to use another struct to wrap the statics as if it were a namespace:
class Zot { struct A { static int x; static int y; } }
Is there a better way?
Update:
An extra requirement is to be able to access these from a template elsewhere
e.g.
template<class T> class B { void foo() { return T::A::x; } };
So putting them in a separate class won’t work
Really the inner struct is your best bet. Another possibility would be to use a typedef to bring in a class of statics. This works well for code generation in that you can separate the extras from the generated code:
In the generated file that doesn’t care at all what’s in Zot_statics:
In a hand-maintained header for when you need to access x and y:
In a hand-maintained cpp file:
And your template should work just fine with
Zot::Xreferring to the instance variable X on Zot, and Zot::A::x refering to the static variable.