L'exemple de code suivant est compilé sous gcc et fonctionne comme j'espère. Cela me permet d'instancier un objet avec une définition de fonction en tant que paramètre de modèle, mais ensuite la classe est capable d'utiliser les différents types de la fonction comme s'ils étaient passés individuellement en tant que paramètres de modèle de type.Conversion du paramètre de modèle non-type de pointeur de fonction en paramètres de modèle de type
template<class FuncSignature> class Obj;
template<class Type1, class Type2> class Obj<Type1 (Type2)>
{
public:
Type1 var1;
Type2 var2;
};
int main(int argc, char **argv)
{
Obj<char (int)> A;
A.var1 = 'a';
A.var2 = 3;
}
Même s'il semble fonctionner, je ne suis pas sûr de savoir ce que fait ce code. Pourquoi ce code fonctionne-t-il et est-il conforme à la norme C++?
oui, c'est légal, en cas de doute, j'essaie http://www.comeaucomputing.com/tryitout/ pour vérifier la conformité. cela fonctionne en raison de la spécialisation de modèle partielle. – Anycorn
Avec la méta-programmation, vous pouvez réellement extraire la plupart des informations sur un type de fonction (ici 'char (int)') en utilisant la bibliothèque Boost FunctionTypes: http://www.boost.org/doc/libs/1_45_0/libs/function_types/ doc/html/index.html Cela peut être un code, mais c'est une lecture intéressante :) –