我有以下代码:
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 争论
我在这里做什么错了?
答案 0 :(得分:2)
根据您提供的信息,建议您使用std::initializer_list
和std::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 } });
当然,这是一对额外的大括号{}
,但是它将使您的代码更简单。