功能参数包
Function parameter pack
我最近在工作草案中看到了以下代码摘录,编程语言C 的标准(日期为2016-05-30,第96页)。
auto vglambda = [](auto printer) {
return [=](auto&& ... ts) { // OK: ts is a function parameter pack
printer(std::forward<decltype(ts)>(ts)...);
return [=]() {
printer(ts ...);
};
};
};
我在这里无法理解椭圆。从" C"意义上讲,它们不是旧的椭圆形,因为它们正在扩大。从"模板参数包"的意义上讲,它们不是参数包,因为没有可见的模板。在评论中,它将其称为功能参数包。
我研究了是否可以使用参数包定义常规功能。
void f(auto&& ...ts) {} // error
没有编译但
auto k = [](auto&& ...ts){};
编译良好,我可以按预期称为
k(1, 2, 3);
在我看来,这只是一个变相的模板参数包,因为lambdas是伪装的函子。因此,只有lambda表达方式才有可能。
我将感谢澄清和/或阐明。
auto
lambdas其中添加了C 14。
这允许您使用template operator()
创建lambdas。
您用
做到这一点[](auto x){}
[](auto...xs){}
[](auto& xs){}
[](auto&...xs){}
[](auto&& xs){}
[](auto&&...xs){}
[](auto const& xs){}
[](auto const&...xs){}
语法。请注意,可以添加非模板参数(以上不是令人震惊的)。这些对应于auto
映射到隐式模板类型参数。
有一些关于将其扩展到概念建议中的正常功能的讨论,该概念提交了C 14,C 17,现在可以在C 20中进行TS。
相关文章:
- 对可变参数使用声明.如何选择正确的功能
- 如何在C++中调用默认模板功能参数?
- 如何从其他功能C++访问参数?
- 如何定义可变参数类模板的成员模板功能
- C++ std::enable_if - 第二个参数的功能
- 对于非常量指针类型的参数,未调用具有常量指针模板类型参数的功能
- 具有C++迭代器参数的多功能函数
- "(void) cast"与功能有什么区别 "__attributes__"来沉默未使用的参数警告?
- C 函数调用包装器包含类成员功能作为模板参数
- 非拖动功能模板参数包的合法使用
- 组件X86转换为ARM功能呼叫,其中有不同数量的参数为ARM
- 公共功能以私人课程为参数
- 如何部分专业化功能以用元组元素作为参数调用功能
- 如何存储指针以功能模板,该模板将可呼叫对象作为其参数之一
- std ::功能作为默认参数的功能
- C 功能模板指定第二个模板参数类型
- 传递多个参数的功能,该函数将类包含到其他函数
- 别名一个模板函数,该功能没有参数可更简洁
- 如何推断for_each的模板参数功能
- 用户界面-GUI和文本模式C++设计,以消除冗余(可选参数?功能过载?)