. J'ai écrit ce code après avoir lu enable_if method specialization. Je veux que la méthode hello() n'existe que si l'argument template est bool et cela fonctionne. Cependant, je rencontre des problèmes lorsque j'essaie de résoudre le même problème en utilisant enable_if. J'ai le code suivant. Toute aide est appréciée. Si enable_if n'est pas approprié pour ce travail, qu'est-ce qui est généralement utilisé?compilation conditionnelle de la méthode de membre d'argument vide en utilisant enable_if
#include <iostream>
#include <type_traits>
using namespace std;
template<typename T>
struct MyClass{
typename std::enable_if<std::is_same<T,bool>::value, void>::type
hello(void)
{
cout<<"hello only for bools"<<endl;
}
};
int main(int argc, char** argv){
MyClass<bool> myclass1;
myclass1.hello();
MyClass<float> myclass2;// compilation error. Don't know how to solve
//myclass2.hello(); //I want only this line to cause compilation error
return 0;
}
EDIT: J'ai trouvé la solution à ma question dans la réponse de jpihl à std::enable_if to conditionally compile a member function. Mais pourrait-on expliquer pourquoi ce qui précède ne fonctionne pas?
#include <iostream>
#include <type_traits>
using namespace std;
template<typename T>
struct MyClass{
template<class Q = T>
typename std::enable_if<std::is_same<Q, bool>::value, void>::type hello()
{
cout<<"hello only for bools"<<endl;
}
};
int main(int argc, char** argv){
MyClass<bool> myclass1;
myclass1.hello();
MyClass<float> myclass2;// throws errow. Don't know how to solve
myclass2.hello(); //
return 0;
}
Cela l'a rendu absolument clair. Merci beaucoup. – user2709349
@ user2709349 Et bienvenue dans Stackoverflow! La façon de dire merci pour une réponse ici est de [accepter la réponse] (http://stackoverflow.com/help/accepted-answer) en cochant la case grise. –