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