Mam tylko plik hpp dla zadania szkolnego w C++ (nie wolno mi dodawać pliku cpp, deklaracja i implementacja powinny być zapisane w pliku).klasa szablonowa z jedną metodą specjalizującą się w C++
Napisałem ten kod wewnątrz niego:
template<class T>
class Matrix
{
void foo()
{
//do something for a T variable.
}
};
Chciałbym dodać inną metodę foo
, ale to foo()
będą specjalizuje się tylko <int>
. Czytałem w niektórych miejscach, że muszę zadeklarować nową klasę specjalizacji, aby to działało. Ale to, co chcę, jest to, że wyspecjalizowana foo
będzie leżeć tuż pod oryginalnym foo
, więc będzie wyglądać następująco:
template<class T>
class Matrix
{
void foo(T x)
{
//do something for a T variable.
}
template<> void foo<int>(int x)
{
//do something for an int variable.
}
};
- Dlaczego otrzymuję błąd na tej składni ("Oczekuje niewykwalifikowany-id przed" < "token")?
- Dlaczego to nie jest możliwe?
- Jak mogę to naprawić bez deklarowania nowej specjalistycznej klasy?
Dzięki
'foo' nie jest szablonem. 'Matrix' jest. –
Otrzymujesz błąd, ponieważ narusza to składnię C++. Nie możesz specjalizować tylko członka klasy szablonu, ale musisz specjalizować całą klasę. – 101010
Ale mam wiele innych funkcji w tej klasie, więc czy muszę skopiować i wkleić wszystkie te funkcje do nowej klasy "int"? brzmi jak straszne powtórzenie kodu. – user2630165