gpt4 book ai didi

c++ - "Overload"基于模板参数个数的模板

转载 作者:行者123 更新时间:2023-12-01 14:24:56 25 4
gpt4 key购买 nike

我正在制作一个模板来帮助制作二维数组(矩阵)。现在,它只是一个别名 std::arraystd::array 里面,我喜欢它,因为它将大小保留为类型的一部分(这将有助于稍后进行编译时检查。

template <class T, size_t Rows, size_t Columns>
using Matrix = std::array<std::array<T, Columns>, Rows>;

我想选择性地省略 T并将其默认为 double因为常见的情况是 double 。

我意识到默认模板参数的正常方法是将其放在末尾,以匹配 std::array API,我想避免使用 template <size_t Rows, size_t Columns, class T = double> .

我尝试了以下方法,希望编译器可以根据模板参数的数量进行选择,但由于“模板声明冲突”而失败。

template <class T, size_t Rows, size_t Columns>
using Matrix = std::array<std::array<T, Columns>, Rows>;

template <size_t Rows, size_t Columns>
using Matrix = std::array<std::array<double, Columns>, Rows>;

也许有一种更奇特的方法可以通过另一种模板机制来做到这一点?

最佳答案

你不能重载别名。但是,您可以重载函数模板,并且可以利用该事实来创建一个工厂函数,该函数将为您创建该类的一个实例。会给你类似的功能

template <class T, size_t Rows, size_t Columns>
auto create_matrix() { return std::array<std::array<T, Columns>, Rows>{}; }

template <size_t Rows, size_t Columns>
auto create_matrix() { return std::array<std::array<double, Columns>, Rows>{}; }

然后你像这样使用它

auto double_matrix = create_matrix<2, 4>();
auto float_matrix = create_matrix<float, 2, 4>();

关于c++ - "Overload"基于模板参数个数的模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63193847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com