Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

template <> przed nazwą klasy specjalizowanej

Ostatnio zmodyfikowano 2012-07-03 15:28
Autor Wiadomość
Dawidsoni
Temat założony przez niniejszego użytkownika
template <> przed nazwą klasy specjalizowanej
» 2012-07-03 14:28:36
Witam! Ostatnio napisałem sobie klasę specjalizowaną i wywaliło mi błąd. Zdziwiłem się, ale trzeba było dodać przed nią "template<>". Kod jest taki:

C/C++
template < class typ > class schowek {
    typ aaa;
};

template <> //bez tego błąd
class schowek < float > {
    float x;
public:
    void funkcja();
};

Jeśli nie dodam "template<>" przed "class schowek<float> to jest błąd kompilacji. Dziwi mnie to, ponieważ:
1. Sprawdziłem w Pasji C++ i tam w przykładowych programach wszystko działa bez "template<>".
2. W definiowaniu specjalizowanych funkcji składowych nie potrzeba "template<>".
3. W definiowaniu globalnej funkcji specjalizowanej też nie potrzeba "template".
4. Po co kompilatorowi "template<>"? Bez tej linijki chyba wiadomo o co chodzi...

Korzystam z kompilatora wbudowanego w Visual C++ 2010. To błąd kompilatora, czy moje złe rozumowanie? A może standard się po prostu zmienił?
P-59468
DejaVu
» 2012-07-03 14:43:27
P-59469
Dawidsoni
Temat założony przez niniejszego użytkownika
» 2012-07-03 14:57:16
Dałeś mi link potwierdzający, że tak jest, a nie napisałeś mi, czy tak zawsze było i po co to kompilatorowi?
P-59471
DejaVu
» 2012-07-03 15:28:41
(...) po co to kompilatorowi?
Sam stwierdziłeś, że bez tego się nie kompiluje więc chociażby po to :) Czy od zawsze tak było... no to musiałbyś zapoznać się ze starymi wersjami standardu. Opcji jest kilka:
1) tak było od zawsze (a w książce błędy przecież się zdarzają).
2) standard się zmienił (a książka była pisana przed zmianą standardu).
3) tak było od zawsze (ale kompilatory są bardziej restrykcyjne i dawniej przepuszczały niepoprawny kod z punktu widzenia standardu, a teraz już nie).
P-59473
« 1 »
  Strona 1 z 1