我需要使用初始化列表初始化编译时大小的类数组。我已经知道可以使用参数包构造函数并即时初始化,但在这种情况下我需要使用初始化列表。如果可能的话,我也想避免动态初始化数组。以下是伪代码:
当然,对于非 const 类型,我可以执行:
但是,如果我尝试使用一个const类,比如
我正在使用C++20。我看到了 How do I initialize a member array with an initializer_list?,但想知道自那时以来是否有什么变化。
template<typename Type, std::size_t Length>
class Test
{
public:
Test(const std::initializer_list<Type> args)
: m_tData(args) //<-- Doesn't work of course
{}
private:
Type m_tData[Length];
};
当然,对于非 const 类型,我可以执行:
Test(const std::initializer_list<Type> args)
{
std::copy(args.start(), args.end(), m_tData);
}
但是,如果我尝试使用一个const类,比如
Test<const int, 3>({1, 2, 3})
,那么这个方法就行不通了。难道我必须使用模板特化来使内部数组实际上不是const,以便我可以从构造函数体中初始化它吗?我正在使用C++20。我看到了 How do I initialize a member array with an initializer_list?,但想知道自那时以来是否有什么变化。
std::initializer_list
初始化数组。 - Nikos C.<size_t... ii>
:m_tData{ (*(list.begin() + ii)), ... }
。 - Evginitializer_list
的大小。 - Evg