J'essaie d'implémenter un mécanisme pour détecter si la classe fournie contient une méthode statique ou non. Il est un code assez simple, mais je ne peux pas comprendre pourquoi decltype()
ne fonctionne pas comme prévu pour la spécialisation de EnableIfHasFooMethod
classe:SFINAE pour détecter la méthode statique
#include <iostream>
struct A {
static int Foo() { return 0; }
};
template <class T, class = void>
struct EnableIfHasFooMethod {};
template <class T>
struct EnableIfHasFooMethod<T, decltype(T::Foo)> {
typedef void type;
};
template <class T, class = void>
struct HasFooMethod {
static const bool value = false;
};
template <class T>
struct HasFooMethod<T, typename EnableIfHasFooMethod<T>::type> {
static const bool value = true;
};
int main() {
std::cout << HasFooMethod<A>::value << std::endl;
return 0;
}
La sortie est 0
, mais devrait être 1
.
J'ai oublié que la spécialisation devrait être pour les paramètres de modèle par défaut. Je vous remercie! – eXXXXXXXXXXX2
aime juste l'opérateur de virgule – quetzalcoatl
@quetzalcoatl - moi aussi. – max66