Est-il possible d'écrire un modèle pour vérifier la fonction de l'existence?

Est-il possible d'écrire un modèle qui change de comportement en fonction de si un membre de la fonction est définie sur une classe?

Voici un exemple simple de ce que j'ai envie d'écrire:

template<class T>
std::string optionalToString(T* obj)
{
    if (FUNCTION_EXISTS(T->toString))
        return obj->toString();
    else
        return "toString not defined";
}

Donc, si class T a toString() défini, puis il l'utilise; sinon, il n'a pas. La partie magique que je ne sais pas comment faire, c'est la "FUNCTION_EXISTS".

Bien sûr, il va sans dire que le modèle de réponse(s) ci-dessous fonctionnent uniquement avec de la compilation de l'information en temps, c'est à dire T doit avoir toString. Si vous passez dans une sous-classe de T t définir toString, mais T n' pas, il vous sera dit toString n'est pas défini.
Possible en Double Comment faire pour vérifier si un nom de membre (variable ou fonction) existe dans une classe, avec ou sans spécification de type?, car il couvre plus large de problème avec C++03 C++1y.

OriginalL'auteur andy | 2008-11-02