如何使编译器推断正确的模板整数为我
How to make compiler infer the right template integer for me
考虑这段:
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>
获得特殊的专门化)。
相关文章:
- 64 位整数和更早的 C++ 编译器
- 编译器C++如何在二进制代码中表示整数
- 有没有办法让32位C 编译器遵循16位整数促销规则
- C++:编译器是否优化整数 + 浮点算术运算?
- 编译器用于编译 128 位整数的基本算术运算的技巧
- 当我要修改指针到常量整数时,为什么我的编译器不显示错误
- 编译器是否有可能检测整数溢出或其他数据类型溢出的可能性
- 尝试创建随机整数向量时的OpenMPI编译器错误
- 编译器警告(CodeBlocks/wxwidget):您的编译器似乎不支持64位整数,而是使用仿真类
- 编译器是否调整整数大小
- 有符号整数溢出为负数:这是一个编译器错误,还是我误解了优化
- srand(time(null))导致编译器警告:隐式转换会丢失整数精度
- g++编译器对字符串数组和整数数组的看法不同吗?
- 如何使编译器推断正确的模板整数为我
- 当编译器将浮点变量转换为整数变量时,它会做什么?
- Visual Studio 2013有符号/无符号整数数学行为不同时,求值表达式作为函数参数,编译器切换
- 当将数组的大小声明为整数变量时,为什么会出现编译器错误?
- 试图使用boost::spirit解析字符串中的整数时,编译器出现错误
- 定义为整数,但编译器认为其中一个是双精度
- 为什么C++编译器默认情况下不对整数、浮点和指针变量进行零初始化?