是否可以根据模板的int类型生成参数?
我想生成类似
的内容template<int num>
void func(int g,...){}
如果num = 10那么我希望我的函数变为void func(int g,int gg,.....,int gggggggggg);
我很想知道这是否可行。谢谢。
答案 0 :(得分:2)
变量函数参数la <cstdarg>
不是类型安全的,在C ++中它们不是一个好主意。如果您有C ++ 11,则可以使用可变参数模板获得更好的结果。
尽管如此,如果你想使用可变参数函数参数,你必须告诉函数它有哪些参数以及它们有多大。传统上,您可以在其中一个参数中传递该信息(例如printf
)。如果你愿意,可以使用模板参数来实现该效果,但是因为你必须至少有一个非变量参数,所以真的没有必要。最重要的是,将函数设为模板将为每个N
实例化一个不同的代码!
因此,总结一下:不要使用可变参数函数。如果必须使用可变参数函数,请不要在它们中使用模板。
答案 1 :(得分:1)
如果您无法通过C ++ 11访问可变参数宏,则可以尝试使用PUMP之类的外部元编程工具。
请注意,这会使您的构建过程变得复杂,因为您现在正在使用额外的工具将之类的 C ++源代码转换为实际 有效的内容C ++源代码。
您还可以查看Boost Preprocessor library之类的内容,这样可以避免使用额外的工具,但使用起来会比较麻烦。