常量正确性编译错误到模板函数中的无效转换错误
const-correctness compile-errors to invalid conversion error in template function
我构建了一个函数,该函数将单个偏移数偏移量解压缩为索引数组rindex。我用它来获取高维网格的相应索引。诚然,该功能的reverse_iterators看起来有点古怪,但它有效,我现在不知道如何以不同的方式做到这一点。
现在,一旦我使边界变量限定为常量,我就会得到一个关于reverse_iterators的非常神秘的编译时错误。谁能帮我一点?
#include <array>
#include <iostream>
template <typename size_type, typename crIt, typename rIt>
constexpr size_type unpeel(size_type offset, const crIt rbegin, const crIt rend,
rIt rindex) {
for (rIt rit = rbegin; rit != rend; rit++) {
*rindex++ = offset % *rit;
offset /= *rit;
}
return offset;
}
int main() {
size_t count = 0;
constexpr size_t N = 2;
const std::array<size_t, N> bounds{{2, 3}};
std::array<size_t, N> index{};
unpeel(0, bounds.rbegin(), bounds.rend(), index.rbegin());
}
下面是错误示例: https://ideone.com/nSLPaw
迭代器rbegin
不能分配给rit
- 您需要将其声明为常量迭代器(或简称auto
):
for (auto rit = rbegin; rit != rend; rit++)
由于您是按值传递的,因此您可以简单地
while (rbegin != rend) {
*rindex++ = offset % *rbegin;
offset /= *rbegin++;
}
成功编译的完整代码:
template <typename size_type, typename InputIterator, typename OutputIterator>
constexpr size_type unpeel(size_type offset,
InputIterator rbegin,
InputIterator rend,
OutputIterator rindex)
{
for (; rbegin != rend; ++rbegin) {
*rindex++ = offset % *rbegin;
offset /= *rbegin;
}
return offset;
}
#include <array>
#include <iostream>
int main() {
constexpr size_t N = 2;
const std::array<size_t, N> bounds{{2, 3}};
std::array<size_t, N> index{};
unpeel(0, bounds.rbegin(), bounds.rend(), index.rbegin());
}
我为迭代器模板类型使用了常规类型名称,以使需求更清晰。
相关文章:
- 错误:无效的预处理指令 #i 的意思是 #if?
- is_same和variadic模板编译时错误无效转换
- printf 和 strftime 的参数错误无效
- 错误:无效使用非静态成员函数"int test::hotplug_callback(libusb_contex
- 我收到一个错误无效的操作数,类型为 const char [42] 和二进制"运算符+"的双倍数
- 错误:无效使用无效
- 发布信号量返回错误 6(无效句柄)
- C++17 可选树,错误:无效使用不完整的类型
- C++ 线程函数指针实现返回错误无效使用非静态成员函数
- 在测试中使用unique_ptr时指针错误无效
- 使用 malloc 而不是 new 会导致 free():指针错误无效
- valgrind错误无效读数4
- X11 XGetImage badmatch错误(无效的参数属性)
- free():C++中的指针错误无效
- 使用 valgrind 的地图中的读取大小错误无效
- 错误:无效的基类C
- 错误:无效使用了void表达式C++
- C++链接错误.无效
- free()错误:无效的下一个大小(fast)
- 我收到错误"无效使用不完整的类型'class map'