gpt4 book ai didi

c++ - 从构造函数的参数中推导出模板 size_t

转载 作者:行者123 更新时间:2023-12-01 14:03:47 26 4
gpt4 key购买 nike

我试图弄清楚如何让编译器根据传递给构造函数的参数推断模板参数。这是我尝试过的:

#include <array>

template<size_t N, size_t M>
class A {
public:
A(const std::array<float, N>& n, const std::array<double, M>& m)
: nElements(n), mElements(m) {
}

private:
std::array<float, N> nElements;
std::array<double, M> mElements;
};

int main() {
A<2, 3> a({1.4f, 2.5f}, {3.0, 2.1, 4.8});
// ^
// |
// how can i avoid <2,3> expclicit declaration here?
}

非常感谢您提供任何可能的帮助!

最佳答案

正如@Thomas 的回答所说,在 c++17 之前,您无法从构造函数参数中推断出类模板参数。

但是在这种情况下提供推导指南将不起作用,正如评论中指出的那样,因为 std::array 的模板参数不能从大括号初始化列表中推导出来。

我们可以通过创建一个推导指南来回避这个问题,其中参数是原始数组。这解决了这个问题,因为原始数组的大小可以从大括号初始化列表中推导出来。

// deduce the size using raw arrays
template<size_t N, size_t M>
A(float const (&)[N], double const (&)[M]) -> A<N,M>;

int main() {
A a({1.4f, 2.5f}, {3.0, 2.1, 4.8}); // yay
}

关于c++ - 从构造函数的参数中推导出模板 size_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60763618/

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