是否有任何方法可以简化这行代码中的类型注解:
std::array<std::tuple<char, int>, 3> arr {{{'a', 1}, {'b', 2}, {'c', 3}}};
我以为这会奏效:
std::array<std::tuple> arr {{{'a', 1}, {'b', 2}, {'c', 3}}};
但事实并非如此。
ygya80vv1#
您可以使用std::to_array简化为
std::to_array
auto arr = std::to_array({std::tuple{'a', 1}, {'b', 2}, {'c', 3}});
b5lpy0ml2#
用于推导的类类型的占位符,即没有模板参数列表(如std::tuple)的类模板的名称不能用作模板参数。CTAD(类模板参数推导)仅在 whole 指定类型是推导类类型的占位符时才可能,例如
std::tuple
std::array{/*...*/}
其中std::array是命名一个没有模板参数列表的类模板的占位符。模板参数列表不能存在 * 在所有 *。即使std::array<int>{0, 1, 2, 3}也是不可能的。你想要的语法是不可能的。您需要做出一些让步,例如在数组初始化器的每个元素周围使用std::make_tuple。
std::array
std::array<int>{0, 1, 2, 3}
std::make_tuple
2条答案
按热度按时间ygya80vv1#
您可以使用
std::to_array
简化为b5lpy0ml2#
用于推导的类类型的占位符,即没有模板参数列表(如
std::tuple
)的类模板的名称不能用作模板参数。CTAD(类模板参数推导)仅在 whole 指定类型是推导类类型的占位符时才可能,例如
其中
std::array
是命名一个没有模板参数列表的类模板的占位符。模板参数列表不能存在 * 在所有 *。即使std::array<int>{0, 1, 2, 3}
也是不可能的。你想要的语法是不可能的。您需要做出一些让步,例如在数组初始化器的每个元素周围使用
std::make_tuple
。