在c ++ 17中,您可以做到
std::array a{ "one", "two", "three" };
并获得一个std::array<const char*, 3>
。太棒了!
由于数组成员变量必须在类声明中指定其大小,因此不能用作类变量。我想用一个任意长的初始化列表初始化数组和一个或多个constexpr
方法创建一个类。我希望唯一的构造函数将初始化列表作为参数。有办法吗?
答案 0 :(得分:5)
您可以使用以数组大小为模板的类(如果需要,还可以使用元素类型),该类具有可变构造函数。像这样:
template <typename T, std::size_t N>
struct custom_array {
std::array<T, N> data;
template <typename... Args>
constexpr explicit custom_array(Args... args) : data{args...} {
}
};
要能够推论N
,您还需要这样的推导指南:
template <typename... Args>
explicit custom_array(Args... args) -> custom_array<std::common_type_t<Args...>, sizeof...(Args)>;
您可以找到完整的示例on Compiler Explorer。