c++ - 可变参数模板 : Pass parameter pack without expansion

标签 c++ c++11 variadic-functions

旧的 C stdio 工具提供了一种使用 vprintf 工具传递可变参数集的方法。

是否有类似的方式来传递 C++0x 可变模板参数包而不扩展它?

如果您有一个采用可变参数模板参数包的派生类构造函数,并且需要简单地将其传递给基类构造函数,而不是将其解包,这可能会很有用。

例如:

template <class T, class... Args>
Base::Base(const T& v, const Args&... args) 
{
  /*...expand args here ....*/
}

template <class T, class... Args>
Derived::Derived(const T& v, const Args&... args) : Base(v, args)
{
  /*...don't expand args...*/
}

我认为您可以通过在 args 之后排除 ... 来简单地传递 args 参数包而不扩展它,但这只会导致编译器错误在 GCC 4.3 上:

 error: parameter packs not expanded with `...'

那么不展开参数包就可以传递参数包吗?

最佳答案

我不明白扩展是个怎样的问题:扩展参数不会在 Base 构造函数中重新打包吗?我相信使用 args... 会按预期工作。

关于c++ - 可变参数模板 : Pass parameter pack without expansion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4135604/

相关文章:

c++ - 访问者或节点中的 AST 遍历?

java - Var-arg of object arrays vs. object array——试图理解一道SCJP自测题

具有可变数量参数的 Scala 类构造函数

c++ - 在子类中定义可变函数特化

c++ - 如何在 C++ 中获取像素着色器版本和顶点着色器版本

c++ - 如何查找其他c程序的运行时

c++ - 将const char *分配给char *

c++ - 如何在非可变参数模板类中形成可变参数模板函数?

c++ - 初始化 std::string& 的私有(private)类变量

c++ - 为什么不能在 c++0x 模式下使用 libc++ 连接这个 boost::program_options 示例?