template <> przed nazwą klasy specjalizowanej
Ostatnio zmodyfikowano 2012-07-03 15:28
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: template < class typ > class schowek { typ aaa; };
template <> 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ł? |
|
DejaVu |
» 2012-07-03 14:43:27 |
|
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? |
|
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). |
|
« 1 » |