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

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

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

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

Если я создал бы несколько объектов как тип int и несколько floats, был бы он все еще быть два obj экземпляры, так как я только использую два различных типов?

12
задан Peter Alexander 17 March 2010 в 22:13
поделиться

4 ответа

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

Тот факт, что статические переменные-члены отличаются друг от друга, демонстрируется следующим кодом:

#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
20
ответ дан 2 December 2019 в 05:27
поделиться

A и A - два совершенно разных типа, вы не можете безопасно выполнять кастинг между ними. Однако два экземпляра A будут использовать один и тот же статический объект myObject.

4
ответ дан 2 December 2019 в 05:27
поделиться

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

3
ответ дан 2 December 2019 в 05:27
поделиться

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

1
ответ дан 2 December 2019 в 05:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: