【问题标题】:What are the names of the new syntactic entities added for variadic templates?为可变参数模板添加的新语法实体的名称是什么?
【发布时间】:2011-12-19 19:29:09
【问题描述】:

C++11 介绍variadic templates

template <typename... Args>
void foo(Args... params) {
    cout << sizeof...(Args) << endl;
}

Argsparams 的名称是什么?我知道其中一个(至少?)被称为可变参数模板包,但它是什么?另一个叫什么?

【问题讨论】:

    标签: c++ terminology c++11 variadic-templates


    【解决方案1】:

    部分引用 FDIS,§14.5.3:

    1模板参数包是一个模板参数,它接受零个或多个模板参数。

    2函数参数包是一个接受零个或多个函数参数的函数参数。

    3参数包要么是模板参数包,要么是函数参数包。

    4pack 扩展 由一个 pattern 和一个省略号组成,其实例化会在一个列表。

    所以在你的例子中,

    • typename... Args 是一个模板参数包(因此也是一个参数包
    • Args... params 是一个函数参数包(因此也是一个参数包
    • sizeof...(Args)pack 扩展,其中Args模式(在此上下文中的标识符)。

    【讨论】:

    • 另外,typename... Args 是一个模板参数包,但不是包扩展。在template&lt;typename ...Args&gt; class A { template&lt;Args... B&gt; class C { }; template&lt;template&lt;Args D&gt; class ...E&gt; class F { }; }; 中,B 是一个模板参数包Args ...B 是它的声明,它也是模式Args Bpack 扩展,扩展为template-parameter-listtemplate&lt;Args D&gt; class ...E 也是模式template&lt;Args D&gt; class E 的包扩展。
    • @JohannesSchaub-litb 你能发表这条评论作为答案吗?确实够详细了。
    • 你能解释一下你的第四点,即模式的东西,我的意思是模式的东西是如何工作的?以及它在 c++ 的哪个部分工作:)
    猜你喜欢
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多