Home > Software engineering >  static variables in a template class c
static variables in a template class c

Time:10-13

So, I'm pretty new in the generic programmation and I started the following :

template<class T>
class A
{
public:
  static int m;
}

template<class T>
int A<T>::m;

int main()
{
  A::m = 3; //Cannot compile of course !!
  return 1
}

The idea being to have a member variable that could be shared by all the instances of A, no matter what T we have.

Would there be any way of doing this or do I have to use a global variable instead ?

CodePudding user response:

Members of class templates are never shared between specializations of the class template. You should consider a class template to be just that: A template to create classes of similar structure based on different types. For each type T the specialization A<T> is an independent class. The resulting classes are not otherwise related in any way.

If you want to have multiple classes share a static data member, you can put the member in a base class:

struct ABase
{
  static int m;
};

template<class T>
struct A : ABase
{
};

int ABase::m;

int main()
{
  A<int>::m = 3;
  return A<double>::m; // will return 3
}

You still need to specify a type for the template argument though when accessing the member through A, because A itself is not a class that has members at all, it is just a template of which specializations may or may not have the m member inherited from a base. In particular you could add partial specializations or explicit (full) specializations of A which override the definition of A<T> for some types of T, so that A<T>::m is not ABase::m any longer.

Also make sure that this really logically makes sense for your use case. Again, specializations of a class template are as such unrelated types.

  • Related