在比特币核心C ++实现中,code使用std::reverse_iterator<const uint8_t*>
遍历uint8_t数组。
请参阅下面的简化代码以及pastebin。
#include <stdint.h>
#include <iterator>
#include <iostream>
using namespace std;
uint8_t data[8] = {0, 1, 2, 3, 4, 5, 6, 7};
template<typename T>
void HexStr(const T itbegin, const T itend)
{
for (T it = itbegin; it < itend; ++it)
{
cout << +*it << " ";
}
cout << endl;
}
int main()
{
HexStr(reverse_iterator<const uint8_t*>(data + sizeof(data)),
reverse_iterator<const uint8_t*>(data));
return 0;
}
我的问题是为什么使用常规迭代器(std::iterator<const uint8_t*>
)不能完成相同的 - 编译器错误是error: wrong number of template arguments (1, should be at least 2)
。
请参阅此pastebin中的失败代码。
可以在此处在线复制和编译代码:http://www.compileonline.com/compile_cpp11_online.php
答案 0 :(得分:2)
std::reverse_iterator
将原始迭代器类型作为模板参数。
因此,您要查找的类型为const uint8_t*
,而不是std::iterator<const uint8_t*>
(another thing altogether)。