Question

membres / objets Habituellement statiques d'une classe sont les mêmes pour chaque instance de la classe comportant l'élément statique / objet. Quoi qu'il en soit ce que vous si l'objet statique fait partie d'une classe de modèle et dépend également de l'argument de modèle? Par exemple, comme ceci:

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

Si je jetais un objet de A comme int et l'autre comme float, je suppose qu'il y aurait deux obj, un pour chaque type?

Si je crée plusieurs objets de A comme le type int et plusieurs floats, serait-il encore deux instances de obj, puisque je n'utilise deux types différents?

Était-ce utile?

La solution

Les membres statiques sont différentes pour chaque initialisation du modèle diffrent. En effet, chaque initialisation du modèle est une classe différente qui est généré par le compilateur de la première fois qu'il rencontre que l'initialisation spécifique de la matrice.

Le fait que les variables membres statiques sont différentes est représenté par le code suivant:

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

Ce qui se traduit par

1,2

Autres conseils

A<int> et A<float> sont deux types complètement différents, vous ne pouvez pas lancer entre eux en toute sécurité. Deux instances de A<int> partagent le même myObject statique cependant.

Il y a autant de variables membres statiques comme il y a des classes et cela vaut également pour les modèles. Chaque instanciation séparée d'une classe de modèle crée une seule variable membre statique. Le nombre d'objets de ces classes est basé sur un modèle non pertinent.

Dans les modèles de C sont en fait des copies des classes. Je pense que dans votre exemple il y aurait une instance statique par exemple de modèle.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top