如何通过模板参数推导简化std::array的类型注解?
简化std::array与std::tuple的类型注解
在C++17及更高版本中,你可以利用**类模板参数推导(CTAD)**大幅简化类型注解,无需手动指定完整模板参数:
std::array arr {{{'a', 1}, {'b', 2}, {'c', 3}}};
编译器会自动推导出arr的类型为std::array<std::tuple<char, int>, 3>,完全匹配你的需求。
为什么你的尝试失败?
你写的std::array<std::tuple> arr是非法写法:std::tuple是模板类,必须显式指定其模板参数(比如std::tuple<char, int>)。std::tuple本身不是完整类型,编译器无法从初始化列表推导它的模板参数,因此会编译报错。
其他可选简化方式
如果你需要显式指定std::tuple的类型,但让编译器推导数组大小,也可以这样写:
std::array<std::tuple<char, int>, std::dynamic_extent> arr {{{'a', 1}, {'b', 2}, {'c', 3}}};
不过这种写法不如直接使用CTAD简洁,通常推荐第一种写法。
内容的提问来源于stack exchange,提问作者vim_overlord
相关产品推荐
相关产品推荐

