C++推断尖括号内类型的模板参数

sczxawaw  于 2023-07-01  发布在  其他
关注(0)|答案(2)|浏览(102)

是否有任何方法可以简化这行代码中的类型注解:

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}}};

但事实并非如此。

ygya80vv

ygya80vv1#

您可以使用std::to_array简化为

auto arr = std::to_array({std::tuple{'a', 1}, {'b', 2}, {'c', 3}});
b5lpy0ml

b5lpy0ml2#

用于推导的类类型的占位符,即没有模板参数列表(如std::tuple)的类模板的名称不能用作模板参数。
CTAD(类模板参数推导)仅在 whole 指定类型是推导类类型的占位符时才可能,例如

std::array{/*...*/}

其中std::array是命名一个没有模板参数列表的类模板的占位符。模板参数列表不能存在 * 在所有 *。即使std::array<int>{0, 1, 2, 3}也是不可能的。
你想要的语法是不可能的。您需要做出一些让步,例如在数组初始化器的每个元素周围使用std::make_tuple

相关问题