[英]Is it possible to initialize an std::array of unnamed structs?
以下作品:
struct
{
int v;
} vals[] = { {1}, {2} };
我可以做同樣的事情,而是初始化一個std::array
嗎?
編輯,因為很多人都在問'為什么'
有一些非常明顯的解決方法(在評論中列出),但我只想使用一次類型,所以我真的不希望它添加到我當前的命名空間。 我可以使用元組或類似的東西,但具有命名值可以提高清晰度。 如果我構建一個std::array
,我不需要c-array值,所以我不能使用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包含type-specifier-seq ,因此它不能是類的定義。
你可以使用typedef,但是:
§9.1/ 5用於命名類類型或其cv限定版本的typedef-name (7.1.3)也是類名 。 [...]
我會贊同TC的建議:
struct { int v; } foo; std::array<decltype(foo), 10> bar = {{{1},{2}}};
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.