Domanda

Solitamente membri statici / oggetti di una classe sono gli stessi per ogni istanza della classe avente l'elemento / oggetto statico. Comunque che dire se l'oggetto statico è parte di una classe template e dipende anche l'argomento modello? Ad esempio, in questo modo:

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

Se avessi gettato un oggetto di A come int e un altro come float, credo che ci sarebbero due obj, uno per ogni tipo?

Se avessi creare più oggetti di un tipo come int e molteplici floats, sarebbe ancora due istanze obj, dal momento che sto usando solo due tipi diversi?

È stato utile?

Soluzione

I membri statici sono diversi per ogni inizializzazione modello differente. Questo perché ogni inizializzazione template è una classe diversa generata dal compilatore la prima volta che rileva che specifica l'inizializzazione del modello.

Il fatto che le variabili membro statiche sono differenti è mostrato da questo codice:

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

che si traduce in

1,2

Altri suggerimenti

A<int> e A<float> sono due tipi completamente diversi, non puoi lanciare tra di loro in modo sicuro. Due istanze di A<int> condivideranno lo stesso myObject statica però.

Ci sono tante variabili membro statiche in quanto vi sono classi e questo vale anche per i modelli. Ogni esemplificazione separata di una classe template crea una sola variabile membro statica. Il numero di oggetti di queste classi templated è irrilevante.

Nei modelli C ++ sono in realtà copie di classi. Credo che nel tuo esempio ci sarebbe un'istanza statico per esempio template.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top