2010-06-20 37 views
0

J'ai une fonction de modèle qui a un nombre différent d'arguments dû au type de modèle. Cette fonction est enveloppée avec la définition de la macro.Nombre d'arguments dans la définition de la macro

#define SomeTemplate(TemplateType, Arguments) someFunc<TemplateType>(Arguments); 

Tout va bien quand je suis en utilisant un seul argument pour les appels de fonction, mais j'ai besoin plus. Je regardais ce coup de pouce fait ces choses à travers la définition des macros différentes, comme ceci:

#define TEMP_1(Arg1) someFunc<Template>(Arg1); 
#define TEMP_2(Arg1, Arg2) someFunc<Template>(Arg1, Arg2); 
#define TEMP_3(Arg1, Arg2, Arg3) someFunc<Template>(Arg1, Arg2, Arg3); 

Mais ce code marqué comme portable pour les compilateurs. Il y a moyen d'utiliser quelques définitions avec n'importe quel nombre d'arguments. Comment puis je faire ça?

+1

Pourquoi en avez-vous besoin du tout? Pourquoi ne pas utiliser directement la fonction template, sans macros? – doublep

+0

@doublep parce que l'appel est beaucoup plus grand et prend plus de place. Je l'ai simplifié ici. – Ockonal

Répondre

2

la seule façon de le faire nous en utilisant __VA__ARGS__ dans les definations macro, cependant, ce ne est pas aussi portable, beacuse compilateurs plus anciens comme VC6 ne prend pas en charge les macros var arg'ed, voir: MSVC GCC

+0

Je ne m'inquiéterais pas de VC6: il ne supporte pas C++. –

+0

il prend en charge C++ bien (je l'utilise pour le développement hérité), vous ne pouvez pas être trop emporté avec des modèles et des macros, et vous devez donc utiliser un meilleur STL, celui de VC6 (comme un ami le décrit) est le sida – Necrolis