Как это изменить, чтобы у меня была только ОДНА копия
Вы можете наследовать от общего (не шаблонного) базового класса, чтобы гарантировать отсутствие экземпляра для каждого экземпляра шаблона.
... что содержит любой тип?
Это зависит от ваших ожиданий. Я собираюсь предположить из вашего примера, что «любой тип» означает «любое создание шаблона класса A
».
Поскольку эти типы могут различаться по размеру, лучше всего удерживать указатели на объекты.
Это один пример решения, которое решило бы обе эти проблемы.
class ACommon {
// Put a common virtual interface here.
};
template <class T> class A : public ACommon {
};
class BCommon {
// You'll have a single, common static here.
static list<shared_ptr<ACommon> > mylist;
};
template <class T> class B : public BCommon{
};