Подтвердить что ты не робот

Статический член шаблона С++, один экземпляр для каждого типа шаблона?

Обычно статические члены/объекты одного класса одинаковы для каждого экземпляра класса, имеющего статический член/объект. В любом случае, если статический объект является частью класса шаблона, а также зависит от аргумента шаблона? Например, например:

template<class T>
class A{
public:
  static myObject<T> obj;
}

Если бы я выбрал один объект из A как int, а другой как float, я предполагаю, что будет два obj, по одному для каждого типа?

Если бы я создал несколько объектов типа A как type int и multiple float s, все равно было бы два экземпляра obj, так как я использую только два разных типа?

4b9b3361

Ответ 1

Статические элементы различаются для каждой инициализации различных шаблонов. Это связано с тем, что каждая инициализация шаблона является другим классом, который генерируется компилятором при первом запуске этой конкретной инициализации шаблона.

Тот факт, что статические переменные-члены разные, показан этим кодом:

#include <iostream>

template <class T> class Foo {
  public:
    static int bar;
};

template <class T>
int Foo<T>::bar;

int main(int argc, char* argv[]) {
  Foo<int>::bar = 1;
  Foo<char>::bar = 2;

  std::cout << Foo<int>::bar  << "," << Foo<char>::bar;
}

В результате получается

1,2

Ответ 2

A<int> и A<float> - два совершенно разных типа, вы не можете безопасно их перемещать. Два экземпляра A<int> будут совместно использовать один и тот же статический myObject.

Ответ 3

Существует столько статических переменных-членов, сколько есть классов, и это в равной степени относится к шаблонам. Каждое отдельное создание экземпляра класса шаблона создает только одну статическую переменную-член. Количество объектов этих шаблонных классов не имеет значения.

Ответ 4

В С++ шаблоны фактически являются копиями классов. Я думаю, что в вашем примере будет один статический экземпляр для экземпляра шаблона.