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?
1
A
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.