通过初始化列表“:”部分的 const 字段的 C++ 初始化

c++ initialization of const field via initializer-list ":" section

在下面的代码中,我如何声明 vv 为常量:vector<vector<float>> const vv;?例如。是否有任何 c++0x 版本可以让我在 : ...“initializer-list”部分循环,before the {}?

#include <vector>
using std::vector;

struct ST {
    vector<int> const x; // simple constructor, initializ. via ": x(x)"
    vector<vector<float>> vv; // requieres loop, can be done in ": ..."?
    ST(vector<int> x, std::initializer_list<vector<float>> lv) : x(x) {
        for (auto v : lv) {
            vv.push_back(v);
        }
    }
};

std::vector 有一个带有初始化列表的构造函数,你不需要循环:

struct ST {
    vector<int> const x;
    vector<vector<float>> const vv;

    ST(vector<int> x, std::initializer_list<vector<float>> lv) :
        x(x),
        vv{lv} 
    {}
};

如果您的示例过于简单并且您确实需要一个循环,您可以使用 static 方法来初始化初始化列表中的 const 个成员:

struct ST {
    vector<int> const x;
    vector<vector<float>> const vv;

    ST(vector<int> x, std::initializer_list<vector<float>> lv) :
        x(x),
        vv{create_vector(lv)} 
    {}
    static vector<vector<float>> create_vector(std::initializer_list<float> lv);
};