基于模板参数的枚举参数?

时间:2011-08-27 00:02:43

标签: c++

是否可以根据模板的int类型生成参数?

我想生成类似

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

如果num = 10那么我希望我的函数变为void func(int g,int gg,.....,int gggggggggg);

我很想知道这是否可行。谢谢。

2 个答案:

答案 0 :(得分:2)

变量函数参数la <cstdarg>不是类型安全的,在C ++中它们不是一个好主意。如果您有C ++ 11,则可以使用可变参数模板获得更好的结果。

尽管如此,如果你想使用可变参数函数参数,你必须告诉函数它有哪些参数以及它们有多大。传统上,您可以在其中一个参数中传递该信息(例如printf)。如果你愿意,可以使用模板参数来实现该效果,但是因为你必须至少有一个非变量参数,所以真的没有必要。最重要的是,将函数设为模板将为每个N实例化一个不同的代码!

因此,总结一下:不要使用可变参数函数。如果必须使用可变参数函数,请不要在它们中使用模板。

答案 1 :(得分:1)

如果您无法通过C ++ 11访问可变参数宏,则可以尝试使用PUMP之类的外部元编程工具。

请注意,这会使您的构建过程变得复杂,因为您现在正在使用额外的工具将之类的 C ++源代码转换为实际 有效的内容C ++源代码。

您还可以查看Boost Preprocessor library之类的内容,这样可以避免使用额外的工具,但使用起来会比较麻烦。