【问题标题】:How can I initialize a vector in the initializer list of a varargs constructor?如何在可变参数构造函数的初始化列表中初始化向量?
【发布时间】:2014-07-10 07:03:25
【问题描述】:

下面这个类的构造函数需要详细说明:

class Foo {
public:
    const std::vector<Bar> bars;
    Foo(int num_bars, ...);
}

为了便于讨论,假设额外的参数都是const Bar&amp; 或只是Bar

我需要在构造时用 va_list 中的条初始化 v。我该怎么做?

【问题讨论】:

    标签: c++ vector constants variadic-functions initializer-list


    【解决方案1】:

    你不能。将Foo 改为可变参数模板:

    template <typename ...ArgumentTypes>
    Foo(ArgumentTypes&& args...):
    bars({std::forward<ArgumentTypes>(args)...})
    {
    }
    

    这使用向量的初始化列表构造函数。

    【讨论】:

    • 您的示例中的双引用符号是什么意思?是否涉及某种搬家?
    • @einpoklum 它被称为通用参考。它利用新的引用折叠规则来确保构造函数可以绑定到左值和右值。 std::forward 确保输入的左值/右值正确转发到下一个函数。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2020-09-27
    • 2015-02-19
    相关资源
    最近更新 更多