【发布时间】:2013-12-04 15:56:57
【问题描述】:
我想将调用转发到具有可变参数方法的库。我能想出的最简单的例子来复制这个问题是这样的:
void Bar(int useless, ...)
{
//Does something
}
template<typename... Args>
void Foo(int useless, Args... args)
{
Bar(useless, args...);
}
如您所见,我已经尝试过了。但是,即使编译成功,它似乎也会导致堆栈出现摆动,并且我在应用程序退出时看到错误。我可以从编译器的角度理解这个解决方案是有问题的。
我不确定如何让这个工作,或者是否有可能让这个工作。我看到有些人建议在类似情况下使用“指数技巧”,但我无法在这种特殊情况下使用它。
任何帮助表示赞赏!
【问题讨论】:
-
变量参数的 C 版本非常有限,可能是来自
Foo的 args 被传递给bar并以不正确的类型检索的情况。见stackoverflow.com/questions/15026671/c-variable-argument-list -
你能提供一个产生错误的完整样本吗? msvc、clang 和 gcc 编译的版本对我来说似乎运行良好。
-
这适用于可简单复制的类型(假设
Bar有一些方法可以确定它们的类型);其他类型根本无法通过...传递,您无法解决此问题。
标签: c++ templates c++11 variadic