Possible Duplicate:
Is it possible to write a C++ template to check for a function's existence?Vérifier si un argument de modèle a une fonction membre
Ceci est très similaire à mon earlier question. Je veux vérifier si un argument template contient une fonction membre ou non.
J'ai essayé ce code similaire à celui de la réponse acceptée dans ma question précédente.
struct A
{
int member_func();
};
struct B
{
};
template<typename T>
struct has_member_func
{
template<typename C> static char func(???); //what should I put in place of '???'
template<typename C> static int func(...);
enum{val = sizeof(func<T>(0)) == 1};
};
int main()
{
std::cout<< has_member_func<B>::val; //should output 0
std::cout<< has_member_func<A>::val; //should output 1
}
Mais je ne sais pas ce que dois-je mettre en place de ???
pour le faire fonctionner. Je suis nouveau au concept SFINAE.
Utilisez quelque chose de similaire à HAS_MEM_FUNC qui Johannes posté dans ce fil. J'ai déjà utilisé ce code et ça marche bien. –
icecrime Merci d'avoir signalé qu'il s'agit d'un doublon. Cependant, la réponse acceptée utilise un opérateur typeof non standard. Pouvez-vous suggérer une alternative? Selon le commentaire de MSalter char statique func (char [sizeof (& C :: helloworld)]) devrait fonctionner? – NEWBIE
@NEWBIE: voir Johannes répondre, c'est beaucoup mieux – icecrime