sirven que plantillas plantilla para los clases c++ templates static member

que - Miembro de la plantilla estática C++, una instancia para cada tipo de plantilla?



para que sirven los templates c++ (4)

Por lo general, los miembros / objetos estáticos de una clase son los mismos para cada instancia de la clase que tiene el miembro / objeto estático. De todos modos, ¿qué pasa si el objeto estático es parte de una clase de plantilla y también depende del argumento de la plantilla? Por ejemplo, así:

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

Si pudiera convertir un objeto de A como int y otro como float , supongo que habría dos obj , uno para cada tipo.

Si creara varios objetos de A como tipo int y múltiples float , ¿seguirían siendo dos instancias obj , ya que solo estoy usando dos tipos diferentes?


En C ++, las plantillas son en realidad copias de clases. Creo que en su ejemplo habría una instancia estática por instancia de plantilla.


Hay tantas variables miembro estáticas como clases y esto se aplica igualmente a las plantillas. Cada instanciación separada de una clase de plantilla crea solo una variable de miembro estática. La cantidad de objetos de esas clases con plantillas es irrelevante.


Los miembros estáticos son diferentes para cada inicialización de plantilla diferente. Esto se debe a que cada inicialización de plantilla es una clase diferente que genera el compilador la primera vez que encuentra esa inicialización específica de la plantilla.

El hecho de que las variables de miembro estático sean diferentes se muestra con este código:

#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; }

Lo que resulta en

1,2


A<int> y A<float> son dos tipos completamente diferentes, no se puede convertir entre ellos de forma segura. Sin embargo, dos instancias de A<int> compartirán el mismo myObject estático.