相关疑难解决方法(0)

如何编写聚合模板别名的推导指南?

使用 C++20,可以为别名模板生成推导准则(请参阅https://en.cppreference.com/w/cpp/language/class_template_argument_deduction 上的“别名模板的推导”部分)。然而,我无法让它们使用聚合初始化语法。在这种情况下,似乎没有生成别名的扣除指南。

看这个例子:

#include <array>

template <size_t N>
using mytype = std::array<int, N>;

// Deduction guideline ???

int main() {
    // mytype error_object = {1, 4, 7}; // ERROR
    mytype<3> object = {1, 4, 7}; // OK, but I have to manually specify the size.
    return object[0];
}
Run Code Online (Sandbox Code Playgroud)

我曾尝试编写演绎指南,但每次都会出现编译器错误。

template <typename T, typename ... U>
mytype(T, U...) -> mytype<1+sizeof...(U)>; // Compiler error
Run Code Online (Sandbox Code Playgroud)

以及我能想到的任何其他准则。

甚至可以自动推导出数组别名的大小吗?

我正在使用 GCC 10.2

c++ aggregate-initialization template-aliases c++20 deduction-guide

11
推荐指数
1
解决办法
217
查看次数