假设我有以下代码:
using Element = std::array<int, 2>;
constexpr auto arrayOfElement()
{
return std::array
{
Element{ 1, 2 },
Element{ 2, 3 },
Element{ 123, 123 },
Element{ 8008, 1337 }
};
}
这编译得很好,但为了指示我作为返回数组元素的类型,我必须不断重复
Element
类型名称。另一种写法:
constexpr auto arrayOfElement2()
{
return std::array<Element, 4>
{
Element{ 1, 2 },
{ 2, 3 },
{ 123, 123 },
{ 8008, 1337 }
};
}
在这里,我不必输入
Element
次数与元素数量一样多,但在这种情况下,我无法推导出大小,并且必须输入第一个元素,这使得整个事情看起来有点尴尬第一个元素有一个边缘情况。
有没有一种方法可以让我只指定一次
Element
类型,同时还能推导出数组的大小(部分 CTAD)?
std::to_array
:
constexpr auto arrayOfElement() {
return std::to_array<Element>({
{ 1, 2 },
{ 2, 3 },
{ 123, 123 },
{ 8008, 1337 }
});
}
摘自 cppreference wiki 页面上的注释:
在某些情况下,当
可用时,无法使用std::array
的类模板参数推导:to_array
当手动指定
to_array
的元素类型并推导长度时,可以使用,当需要隐式转换时,这是更好的选择。std::array
可以复制字符串文字,而类模板参数推导则构造一个指向其第一个字符的单个指针的to_array
。std::array