gpt4 book ai didi

c++ - 如何使用初始化列表构造 std::array 对象?

转载 作者:太空宇宙 更新时间:2023-11-04 13:47:59 25 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
How do I initialize a member array with an initializer_list?

你可以用初始化列表构造一个 std::array 就好了:

std::array<int, 3> a = {1, 2, 3};  // works fine

但是,当我尝试从 std::initializer_list 构造它作为类中的数据成员或基对象时,它不起作用:

#include <array>
#include <initializer_list>

template <typename T, std::size_t size, typename EnumT>
struct enum_addressable_array : public std::array<T, size>
{
typedef std::array<T, size> base_t;
typedef typename base_t::reference reference;
typedef typename base_t::const_reference const_reference;
typedef typename base_t::size_type size_type;

enum_addressable_array(std::initializer_list<T> il) : base_t{il} {}

reference operator[](EnumT n)
{
return base_t::operator[](static_cast<size_type>(n));
}

const_reference operator[](EnumT n) const
{
return base_t::operator[](static_cast<size_type>(n));
}
};

enum class E {a, b, c};
enum_addressable_array<char, 3, E> ea = {'a', 'b', 'c'};

gcc 4.6 的错误:

test.cpp: In constructor 'enum_addressable_array<T, size, EnumT>::enum_addressable_array(std::initializer_list<T>) [with T = char, unsigned int size = 3u, EnumT = E]':
test.cpp:26:55: instantiated from here
test.cpp:12:68: error: no matching function for call to 'std::array<char, 3u>::array(<brace-enclosed initializer list>)'
test.cpp:12:68: note: candidates are:
include/c++/4.6.1/array:60:12: note: std::array<char, 3u>::array()
include/c++/4.6.1/array:60:12: note: candidate expects 0 arguments, 1 provided
include/c++/4.6.1/array:60:12: note: constexpr std::array<char, 3u>::array(const std::array<char, 3u>&)
include/c++/4.6.1/array:60:12: note: no known conversion for argument 1 from 'std::initializer_list<char>' to 'const std::array<char, 3u>&'
include/c++/4.6.1/array:60:12: note: constexpr std::array<char, 3u>::array(std::array<char, 3u>&&)
include/c++/4.6.1/array:60:12: note: no known conversion for argument 1 from 'std::initializer_list<char>' to 'std::array<char, 3u>&&'

我怎样才能让它工作,以便我的包装类可以用初始化列表初始化,如下所示:

enum_addressable_array<char, 3, E> ea = {'a', 'b', 'c'};

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com