如何将具有var长度的编译时间数组传递给构造函数?

时间:2018-08-05 13:29:03

标签: c++11 visual-c++

我有以下代码:

struct MyArrayEntry
{
    int type;
    int id;
};

template<size_t arraySize>
struct MyArray
{
    template<typename T, typename... Types>
    MyArray(T t, Types... ts) : data{ { t, ts... } } {}
    int dataSize = arraySize;
    MyArrayEntry data[arraySize];
};


void Blah()
{
 static MyArray<3> kTest
            (
                { 1, 4 },
                { 2, 5 },
                { 3, 6 }
            );
}

但这无法建立:

  

错误C2661:'MyArray <3> :: MyArray':没有重载函数需要3   争论

我在这里做什么错了?

1 个答案:

答案 0 :(得分:2)

根据您提供的信息,建议您使用std::initializer_liststd::copy通话:

template<size_t arraySize>
struct MyArray
{
    const int dataSize = arraySize;  // Could as well make it constant
    MyArrayEntry data[arraySize];

    MyArray(std::initializer_list<MyArrayEntry> elements)
    {
        std::copy(begin(elements), end(elements), std::begin(data));
    }
};

创建为

MyArray<3> kTest({ { 1, 4 }, { 2, 5 }, { 3, 6 } });

当然,这是一对额外的大括号{},但是它将使您的代码更简单。