是否有可能初始化未命名结构的std ::数组?
以下工作:
struct
{
int v;
} vals[] = { {1}, {2} };
我可以做同样的事情,而是初始化一个std::array
吗?
因为很多人都在问'为什么'
有一些非常明显的解决方法(在评论中列出),但我只想使用一次类型,所以我不想将它添加到我当前的命名空间。 我可以使用一个元组或类似的东西,但是命名值可以提高清晰度。 如果我构造一个std::array
,我不需要c数组值,所以我不能使用decltype。
我想要做的最干净的解决方案是:
struct
{
int v;
} std::array vals = { {1}, {2} };
还有一个学术兴趣的元素 - “这是否有可能以某种方式我没有?”。 似乎不是,所以我可能会使用:
struct
{
int v;
} c_array[] = {};
std::array<std::remove_reference_t<decltype(c_array[0])>, 2> arr = { {1}, {2} };
你做不到的原因:
std::array<struct {int v}, 10> arr;
是因为N4140的以下规则:
§7.1.6/ 3 [...] type-specifier-seq不应定义类或枚举,除非它出现在不是模板声明的别名声明(7.1.3)的type-id中-宣言。
由于模板类型参数是使用type-id指定的,并且type-id包含类型说明符seq,因此它不能是类的定义。
你可以使用typedef,但是:
§9.1/ 5一个typedef-name(7.1.3),它命名一个类的类型,或者一个cv限定的版本,也是一个类名。 [...]
我会跟TC的建议一起去:
struct { int v; } foo; std::array<decltype(foo), 10> bar = {{{1},{2}}};
链接地址: http://www.djcxy.com/p/83771.html
上一篇: Is it possible to initialize an std::array of unnamed structs?