2010-06-20 37 views
0

我有一些模板函數由於模板類型而具有不同數量的參數。這個函數是用宏定義包裝的。宏定義中的參數數

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

當我只使用一個參數進行函數調用時,一切都可以,但我需要更多。我看着它推動通過不同的宏定義做這樣的事情,這樣的:

#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); 

但標記爲便攜式的編譯器的代碼。有一些方法可以使用任意數量的參數進行一些定義。我怎樣才能做到這一點?

+1

爲什麼你需要這個嗎?爲什麼不直接使用模板化函數,而不使用宏? – doublep 2010-06-20 22:08:56

+0

@doublep,因爲調用更大,佔用更多的地方。我在這裏簡化了它。 – Ockonal 2010-06-20 22:20:42

回答

2

只有這樣,才能做到這一點我們在宏definations __VA__ARGS__,然而,它不那麼容易移植,怎麼一回事,因爲舊的編譯器像VC6不支持無功arg'ed宏,請參閱: MSVC GCC

+0

我不擔心VC6:它不支持C++。 – 2010-06-20 22:29:22

+0

它支持C++(我將它用於傳統開發),你不能太過於模板和宏,再加上你需要使用更好的STL,VC6的一個(正如朋友所描述的)是艾滋病 – Necrolis 2010-06-20 22:44:44