Обычно статические участники/объекты одного класса являются тем же для каждого экземпляра класса, имеющего статического участника/объект. Так или иначе что относительно того, если статический объект является частью шаблонного класса и также зависит от аргумента шаблона? Например, как это:
template<class T>
class A{
public:
static myObject<T> obj;
}
Если я бросил бы один объект как int
и другой как float
, Я предполагаю, что было бы два obj
, один для каждого типа?
Если я создал бы несколько объектов как тип int
и несколько float
s, был бы он все еще быть два obj
экземпляры, так как я только использую два различных типов?
Статические члены различны для каждой разной инициализации шаблона. Это происходит потому, что каждая инициализация шаблона представляет собой отдельный класс, который генерируется компилятором в первый раз, когда он сталкивается с этой конкретной инициализацией шаблона.
Тот факт, что статические переменные-члены отличаются друг от друга, демонстрируется следующим кодом:
#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
A
и A
- два совершенно разных типа, вы не можете безопасно выполнять кастинг между ними. Однако два экземпляра A
будут использовать один и тот же статический объект myObject.
Существует столько же статических переменных-членов, сколько классов, и это в равной степени относится к шаблонам. Каждый отдельный инстанс шаблонного класса создает только одну статическую переменную-член. Количество объектов этих шаблонных классов не имеет значения.
В C ++ шаблоны фактически являются копиями классов. Я думаю, что в вашем примере будет один статический экземпляр для каждого экземпляра шаблона.