2009-01-04 11 views
1

Je veux un modèle spécial dans un cas de pointeur-à-fonction-membre. Y a-t-il un moyen de détecter cela? maintenant je déclare struct isPtrToMemberFunc, puis j'ajoute un template supplémentaire (classe TType = void) à chaque classe (juste maintenant 1) et je spécialise le template supplémentaire pour voir si c'est isPtrToMemberFunc. Y a-t-il un moyen de détecter cela automatiquement? sinon ma méthode actuelle est-elle la meilleure solution?est-il possible de détecter la fonction de pointeur à membre?

Répondre

6

Il existe un moyen, mais cela inclut que vous répétiez votre spécialisation pour chaque nombre d'arguments et de modificateurs const/volatile pour ces fonctions membres. Un moyen plus facile de le faire est d'utiliser boost.functiontypes qui fait pour vous:

template<typename T> 
void doit(T t) { 
    if(boost::function_types::is_member_function_pointer<T>::value) { 
     std::cout << "it is"; 
     // ... 
    } else { 
     std::cout << "it is not"; 
     // ... 
    } 
} 

Prenez-le de here.