ho una classe template del modulo:nidificate template C++
template<typename ContainerType>
class ConfIntParamStat {
public:
typedef typename ContainerType::Type Type;
...
private:
void sample(int iteration) {...}
}
vorrei creare una versione specifica del campione funzione per il caso in cui containerType è un vettore. Dove Vector stesso è una classe template, ma non conosco il tipo di valori di questo vettore.
La mia intuizione è stato quello di creare questa nel file di intestazione:
template<typename Type>
ConfIntParamStat<Vector<Type> >::sample(int iteration) {
...
}
Ma non si compila, e l'errore da clang è:
error: nested name specifier 'ConfIntParamStat<Vector<Type> >::' for declaration does not refer into a class, class template or class template partial specialization
E 'possibile utilizzare un altro sintassi?
Non si può specializzare un membro di una classe template. Devi specializzare l'intera classe. Se vuoi davvero specializzare solo un membro, allora crea una funzione di supporto che la funzione membro della classe chiama e sovraccarica o specializza. –
Puoi diramare il tuo 'esempio' con' if (std :: is_same :: value) '? (supponendo che ci sia 'Type' in' Vector') –
mvidelgauz
@DarkFalcon: Spot on. Vorrei forse modificare il tuo commento dicendo "Non puoi * parzialmente * specializzare un membro di una classe template." Se lo specializzi completamente, allora funzionerebbe. Modifica: [esempio] (http://coliru.stacked-crooked.com/a/b83a79e4e01b0e03) – AndyG