2011-08-27 65 views
2

是否可以根據模板的int類型生成參數?基於模板參數的枚舉參數?

我想生成類似

template<int num> 
void func(int g,...){} 

如果num = 10然後我想我的功能成爲無效FUNC(INT克,INT GG,.....,INT GGGGGGGGGG);

我很想知道這是否可行。謝謝。

+2

你有C++ 11嗎? –

回答

2

變量函數參數la <cstdarg>不是類型安全的,它們在C++中不是一個好主意。如果你有C++ 11,你可以使用可變參數模板來獲得更好的結果。如果你想要使用可變參數函數參數,你必須告訴函數哪些參數有多大,它們有多大。傳統上,您會在其中一個參數中傳遞該信息(如printf)。如果你願意,你可以使用模板參數來達到這個效果,但是因爲無論如何你必須至少有一個非可變參數,所以真的沒有必要。最重要的是,將函數作爲模板將爲每個N實例化一個不同的一段代碼!

所以,總結一下:不要使用可變參數函數。如果您必須使用可變參數函數,請不要使用模板。

1

如果您無法通過C++ 11訪問可變宏,則可以嘗試使用外部元編程工具,如PUMP

被警告,這將您的構建過程,因爲你現在使用一個額外的工具,從東西是 C++源代碼的東西,實際上是有效 C++源代碼翻譯複雜化。

你也可以看看Boost Preprocessor library之類的東西,它可以避免使用額外的工具,但使用起來更麻煩。