Konstruktor zależy od obiektu template

0

Witam.

Chciałbym wykorzystać mechanizm template z C++.

Mam taki pseudokod:

template <class T>
class test
{
  public:
     test();
     ~test();
  private:
    T* zm;
};

template <class T>
test<T>::test()
{
  zm = new T();
}

template <class T>
test<T>::~test()
{
  delete zm;
}

int main()
{
  test<int> a1;
  .... 
}

Powiedzmy że mam strukturę :

struct moja_struktura{
  int s1;
  double s2;
  std::string s3;
};

int main()
{
  test<moja_struktura> a2; 
}

Jak nadać im wartości początkowe? Czyli, gdy przekazujemy int wtedy otrzymuje on wartość "0", natomiast dla tej struktury po zadziałaniu konstruktora otrzymamy s1=1 , s2=0,2 , s3="jakis tekst". Jak to wykonać ?
PS. Nie wiem czy tytuł tematu jest adekwatny dla zagadnienia.

0

Nie bardzo rozumiem problem. Masz jak byk w kodzie:

  zm = new T();

czyli wywołanie konstruktora bezparametrowego klasy T. Jeśli więc chcesz nadać wartości początkowe polom swojej struktury to utwórz bezparametrowy konstruktor który te wartości nada.

0

Tylko żeby te wartości nadać odpowiednim polom struktury to w klasie test muszę zdeklarować zmienna typu tej struktury, utworzyć obiekt tej struktury a następnie bez problemów mogę wszystkim polom nadać odpowiednie wartości (jeśli dobrze myślę). Natomiast mi zależy na tym, aby w klasie była jedna zmienna, a podczas tworzenia obiektu rusza do pracy odpowiedni konstruktor, np. gdy tworzymy obiekt test<int> a1, wtedy rusza do pracy jeden konstruktor, natomiast gdy wywołujemy go w formie test<moja_struktura> s2, wtedy rusza 2-gi konstruktor. Jeśli mylę pojęcie to proszę o poprawkę ;)

0

Ja nadal nie rozumiem o co ci chodzi. Wołasz przeciez konstruktor klasy służącej za parametr a nie klasy parametryzowanej. W skrócie wystarczy ci napisać:

struct moja_struktura{
  int s1;
  double s2;
  std::string s3;
  moja_struktura():s1(1),s2(0),s3("jakis tekst"){}
};
0

Oczywiście masz rację, dzięki.
A jak to będzie wyglądało w przypadku typów wbudowanych.

0

Nijak, bo cudów nie zdziałasz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1