Data una dichiarazione di classeÈ possibile utilizzare std :: enable_if per selezionare una specializzazione del modello membro?
class A {
template <typename T> T foo();
};
vorrei specializzarmi A::foo
di vari tipi (int
, ...) e le classi di tipo (POD, non-POD) di T
. Sfortunatamente, non riesco a usare lo std::enable_if
per quest'ultimo. Quanto segue non può essere compilato:
template <> int A::foo<int>(); // OK
template <typename T>
typename std::enable_if<is_pod<T>::value, T>::type foo(); // <<<< NOT OK!
template <typename T>
typename std::enable_if<!is_pod<T>::value, T>::type foo(); // <<<< NOT OK!
Il problema è probabilmente dovuto al far parte std::enable_if<...>
roba della firma funzione e che non ha dichiarato tali membri all'interno A
. Quindi, come posso specializzare un membro del modello in base ai tratti del tipo?
Ma non è possibile sovraccaricare solo sul tipo restituito ... –
@Daniel Gehriger 'enable_if' è stato creato per la rimozione condizionale delle funzioni dalle risoluzioni di sovraccarico, quindi praticamente per questo caso. – nijansen
Sì, ma ho ancora 'A :: foo()' (e molte altre specializzazioni per alcuni tipi specifici) che entreranno in conflitto con qualsiasi cosa sia stata selezionata da 'enable_if'. –