Domyślny typ szablonu i przeciążanie podwójnych operatorów

0

Witam, mam kod:

template<typename X = int>
class Test
{
    public:
        X * cos = NULL;
        int ile = 0;
        Test(){}
        void setter(X item)
        {
            this->cos = new X[1];
            this->cos[0] = item;
            ++ile;
        }
        X getter()
        {return this->cos[0];}
};

Da się w jakiś sposób zrobić, aby kompilator automatycznie stworzył klasę danego typu bez podawania <typ danych="danych"> przy tworzeniu obiektu ?
Dlaczego przy podaniu domyślnego inta w szablonie dalej muszę podawać typ danych (inaczej wywala błąd):

missing template arguments

co jest oczywiste, a trochę z drugiej strony niezrozumiałe, bo podany jest typ domyślny...
Jak przeciążyć podwójny operator np. []= ? [] służy mi do odczytywania danych, a po podaniu []= chciałbym cos przypisać do danej komórki.

0

Looknij na implementacje std::vector

0
#include <iostream>
using namespace std;

template<typename X = int> class Test
  {
   public:
   size_t size;
   X *tb;
   Test(size_t size):size(size),tb(new X[size]) {}
   ~Test() { delete[] tb; }
   X &operator[](size_t idx) { return tb[idx]; }
  };
  
int main()
  {
   Test<> a(5);
   a[3]=666;
   cout<<a[3]<<endl;
   return 0;
  }

http://ideone.com/H8TM87

0

A nie da się zrobić żeby obeszło się bez "< >" przy tworzeniu obiektu ?

0

Tak.

typedef Test<> TestInt; // gdzieś na górze
...
TestInt a(5);
0

Ok, dzięki. Da się w jakiś sposób wyprowadzić w tym przypadku metody poza klasę ? Tak jak bez szablonu zazwyczaj robię:

typ_zwracany Klasa::Metoda()
{

}

A teraz mam problem, bo wyrzuca, że:

'X' does not name a type

0
template<typename X = int> class Test
  {
   public:
   size_t size;
   X *tb;
   Test(size_t size);
   ~Test() { delete[] tb; }
   X &operator[](size_t idx) { return tb[idx]; }
  };

template<typename X> Test<X>::Test(size_t size):size(size),tb(new X[size]) {}

Albo normalnie piszesz całość w ciele klasy.

0

Typedefa nie da się użyć na "template<typename>" żeby skrócić ? Bo kilka stronek w google przeleciałem i jakieś bardziej skomplikowane konstrukcje widzę :D

3

Naucz się poprawnie pisać zanim zaczniesz skracać.

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