gpt4 book ai didi

c++ - 如何让编译器为我推断出正确的模板整数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:35:35 25 4
gpt4 key购买 nike

考虑这件作品:

template <int N> void fill_with_magic(array<int, N>& whatever){
for(int i = 0; i < N; i++){
whatever[i] = magic(i, N);
}
}

我通过特定实例调用它,所以对于 3 的数组我必须这样做:

array<int, 3> some_array_of_3;
fill_with_magic<3>(some_array_of_3);

但我真的必须写<3>吗? ?编译器已经知道数组大小,因此理论上它可以根据该大小推断出正确的实例。我真的可以做到吗?

最佳答案

问题是参数的推导:std::array 的第二个模板参数不是 int所以扣除不会发生,因为它需要转换。

你应该将你的方法定义为

template <array<int, 0>::size_type N> void fill_with_magic(array<int, N>& whatever){
for(int i = 0; i < N; i++){
whatever[i] = magic(i, N);
}
}

这样您就可以正确地期待 array<int,0>::size_type作为论证,然后将被正确地推导出来。实际上我认为大部分实现都使用 size_t但这应该更便携(除非 std::array<T, 0> 获得特殊特化)。

关于c++ - 如何让编译器为我推断出正确的模板整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32669944/

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