est-il possible de spécialiser une méthode modélisée pour Enums?
quelque chose comme (le code invalide ci-dessous): p> dans le cas que ce n'est pas possible, alors supposant J'ai des spécialisations pour un certain nombre de types, comme int code>,
non signé int code>,
long long code>,
non signé long long code>, etc, alors laquelle des spécialisations une valeur d'énorme utilisera? p> p>
4 Réponses :
Vous pouvez utiliser dans une réponse à l'une de mes questions , LitB a publié une explication très détaillée et bien écrite de la manière dont cela peut être fait avec les équivalents de boost. P> std :: activer_if code>
avec std :: is_eum code>
à partir de < Type_Traits> code> pour accomplir cela. p>
Cela semble que cela pourrait fonctionner. Je regarde un coup d'oeil. Merci!
Je ne sais pas si je comprends votre question correctement, mais vous pouvez instancier le modèle sur spécifique Enums:
template <typename T> void f(T value); enum cars { ford, volvo, saab, subaru, toyota }; enum colors { red, black, green, blue }; template <> void f<cars>(cars) { } template <> void f<colors>(colors) { } int main() { f(ford); f(red); }
Cela ne fonctionnerait pas parce que je n'ai pas le type d'enum à l'avance.
En C ++ 11, vous avez le type et vous pouvez donc créer le modèle ENUM. Un sujet plus agréable serait de créer un modèle en fonction d'une valeur particulière de l'énum (F
Vraisemblablement, la seule chose intéressante que vous puissiez faire avec un type que vous savez que vous savez que c'est un énumé, le jette à son type sous-jacent et qu'il convient à ce sujet. Voici comment cela pourrait ressembler à une approche suggérée de James '(AKA Sfinae ) :
template<typename T> typename std::enable_if<std::is_same<T,bool>::value, void>::type Baz(T bl) { if (bl) { //... } else { //... } }
Vous pouvez également utiliser std :: activer_if code> dans l'un des arguments de modèle.
S'il ne peut pas compiler, la fonction n'est pas instanciée du tout (sfinae).
template <typename T>
void f(T value)
{ /* implementation A */ }
template <typename T,
typename = std::enable_if<std::is_enum<T>::value, bool>::type >
void f(T value)
{ /* implementation B */ }
Stackoverflow.com/questions/29762892/...