Ho solo un file hpp per un compito scolastico in C++ (non sono autorizzato ad aggiungere un file cpp, la dichiarazione e l'implementazione dovrebbero essere entrambe scritte nel file).classe template con un singolo metodo specializzato in C++
ho scritto questo codice al suo interno:
template<class T>
class Matrix
{
void foo()
{
//do something for a T variable.
}
};
vorrei aggiungere un altro metodo foo
, ma questo foo()
saranno specializzati per un solo <int>
. Ho letto in alcuni punti che ho bisogno di dichiarare una nuova classe di specializzazione perché funzioni. Ma quello che voglio è che la specializzazione foo
si trovano appena sotto l'originale foo
, in modo che sarà simile a questa:
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.
}
};
- Perché mi appare un errore per questa sintassi ("atteso non qualificata-id, prima ' < "token")?
- Perché non è possibile?
- Come posso risolvere questo problema senza dichiarare una nuova classe specializzata?
Grazie
'foo' non è un modello. 'Matrix' è. –
Si riceve l'errore perché viola la sintassi C++. Non è possibile specializzare solo un membro di una classe modello, ma è necessario specializzarsi per l'intera classe. – 101010
Ma ho molte altre funzioni in quella classe, quindi devo copiare e incollare tutte queste funzioni nella nuova classe "int"? sembra una terribile ripetizione del codice. – user2630165