Выборочное наследование статических членов с помощью CRTP

поэтому у меня есть эта иерархия классов, использующая CRTP:

template <class T>
class A { 
  static Object x;
  static OtherObject y;
}

class B : public A<B> {
}

class C : public A<C> {
}

Первоначальная идея состоит в том, что B и C не имеют общих экземпляров x и y, поскольку A<B> и A<C> считаются отдельными классами. Но предположим, что для экономии ресурсов было определено, что «x» должен быть одноэлементным экземпляром, совместно используемым B и C, в то время как экземпляр «y» все еще должен быть создан для каждого производного класса. Есть ли способ сделать это?

Заранее спасибо.


person Kevin Lin    schedule 07.06.2018    source источник


Ответы (1)


Вы можете сделать шаблон класса производным от другого класса. Определите x в базовом классе.

class ABase { 
  static Object x;
};

template <class T>
class A : public ABase { 
  static OtherObject y;
}

class B : public A<B> {
}

class C : public A<C> {
}
person R Sahu    schedule 07.06.2018