c++ 0x可变参数包:语法
C++0x Variadic Parameter Pack: Syntax
以下代码段在gcc4.6.1下无法编译:
template <typename... TS>
void do_stuff(TS... ts)
{
auto f = [](TS... things) { };
}
抛出一个错误,指出包内容没有展开。下面的代码可以编译:
template <typename... TS>
void do_stuff(TS... ts)
{
auto f = [](TS... things...) { };
}
请注意参数列表中内容后面的额外解包操作符。我从未见过在声明可变包时必须展开它的情况。所以我的问题是:
这是合法的c++ 0x语法(编译的代码片段)还是GCC在处理可变类型时的一个怪现象?
两件事:
- 是的,GCC拒绝
[](TS... things) { }
是错误的。有可能它还没有实施。 - 你方由
[](TS ... things...) { }
申报的内容等同于[](TS... things, ...)
。在c++中(不是在C中),您可以在C风格的可变省略号前省略逗号。所以你可以声明void printf(char const *fmt...)
而不是void printf(char const *fmt, ...)
。这就是发生在的。第一个省略号是参数包解包,第二个省略号是c风格的可变省略号。
相关文章:
- 在标准中,模板参数的语法在哪里定义,例如,'std::function<int(char)>'?
- 将类作为主要参数的语法在哪里需要?
- 初始化对象以在 C++08 中作为参数传递的首选语法是什么?
- 当C++类函数参数之一是结构时,它们的语法有什么不同
- 将显式指定的函数模板重载作为模板参数传递的正确语法是什么?
- 提升::精神::qi::语法和可变参数模板
- C++ 中的默认参数语法和一般语法
- 带有约束的可变参数模板的'requires'表达式的语法是什么?
- C++ C 样式数组作为语法错误的参数
- 使用 MATLAB 语法的 c++ 函数参数?
- 在模板类中的参数包的语法
- 将QMETAMETHOD作为参数传递到使用新的Qobject :: Connect语法的函数
- 在Qt信号和插槽中使用lambda语法并访问传递的参数
- 是否可以在尾随返回类型语法中直接使用参数值(不是其类型,而是值本身)
- 精神语法不会编译:函数模板参数错误?
- 适用于全局模板运算符指定模板参数的适当语法
- hpp文件中的块,这是c ++语法吗?为什么没有传入参数?有人可以解释一下,请
- 有人能解释一下特殊的std::函数模板参数列表语法(这个奇怪的类型(Types..))吗
- 使用仅语法参数切换警告
- 版本80语法-参数列表中的初始化