我有一个函数可以接受任意数量的任何类型的参数(泛型参数)。
我不想使用va_arg东西,我的编译器不支持可变参数模板参数。我使用boost库。
有谁能建议我如何实现这个?
答案 0 :(得分:4)
如果您不想使用va_args
并且不想使用支持可变参数模板的最新编译器(例如免费和开源GCC
或Clang
编译器),没有办法实现这一点。如果您可以使用参数数量的上限,则可以使用Boost.Preprocessor
来定义从0到N
个参数的函数。
答案 1 :(得分:0)
你也可以通过传入一系列无效指针来作弊,
void func(void**args);
并要求最后一个为空,或传递一个向量,
void func(std::vector<void*> args);
但是您将API暴露给滥用和无法追踪的运行时错误,任何体面的代码审核都会要求您离开并正确地重新设计代码。