25 votes

Problèmes avec les paramètres de modèles utilisés dans les macros

J'essaye de compiler le code suivant, j'obtiens une erreur sur la ligne qui spécialise std::vector, il semble que le seul paramètre passé soit en quelque sorte considéré comme deux paramètres. Est-ce que cela a quelque chose à voir avec les crochets ?

Existe-t-il un moyen/mécanisme spécial permettant de transmettre correctement ces paramètres à la macro ?

#include <vector>

template<typename A>
struct AClass {};

#define specialize_AClass(X)\
template<> struct AClass<X> { X a; };

specialize_AClass(int) //ok

specialize_AClass(std::vector<int,std::allocator<int> >) //error

int main()
{
   return 0;
}

L'erreur que je reçois est la suivante :

1 Line 55: error: macro "specialize_AClass" passed 2 arguments, but takes just 1
2 Line 15: error: expected constructor, destructor, or type conversion before 'int'
3 compilation terminated due to -Wfatal-errors.

Lien : http://codepad.org/qIiKsw4l

-3voto

Il y a beaucoup d'autres problèmes avec votre code, mais pour répondre à la question spécifique, le préprocesseur traite juste < y > comme opérateurs inférieur et supérieur.

C'est l'étendue de ses connaissances sur le C++.

Il existe quelques astuces permettant de passer des expressions de modèle en tant qu'arguments de macro, mais la plus simple, et de loin, est la suivante meilleur La réponse pour un débutant est :

NE FAITES PAS ÇA.

Cheers & hth.,

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X