Pregunta

miembros Normalmente estáticas / objetos de una clase son los mismos para cada instancia de la clase que tiene el miembro / objeto estático. De todas formas ¿qué pasa si el objeto estático es parte de una clase de plantilla y también depende del parámetro de plantilla? Por ejemplo, como este:

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

Si yo hubiera echado un objeto de A como int y otro como float, supongo que habría dos obj, uno para cada tipo?

Si me gustaría crear varios objetos de un tipo como int y múltiples floats, ¿seguiría siendo dos casos obj, ya que sólo estoy usando dos tipos diferentes?

¿Fue útil?

Solución

Los miembros estáticos son diferentes para cada inicialización plantilla diversa. Esto es porque cada inicialización plantilla es una clase diferente que es generada por el compilador la primera vez que encuentra que la inicialización específica de la plantilla.

El hecho de que las variables miembro estáticas son diferentes se muestra por 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

Otros consejos

A<int> y A<float> dos tipos completamente diferentes, no se puede convertir entre ellos con seguridad. Dos instancias de A<int> compartirán el mismo myObject estática sin embargo.

Hay tantas variables miembro estáticas, ya que hay clases y esto se aplica igualmente a las plantillas. Cada instancia de una clase separada plantilla crea una sola variable miembro estática. El número de objetos de esas clases con plantilla es irrelevante.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top