下面的示例中的某些内容。 alines为它赋予了价值。
{
uint8_t buffer[16];
#ifdef _WIN32
std::vector<uint8_t>::iterator it_begin;
it_begin._Ptr = (uint8_t*)buffer;
#else
std::vector<uint8_t>::iterator it_begin((uint8_t*)buffer);
#endif
std::vector<uint8_t>::iterator it_end = it_begin + 16;
}
好的,让我试着更具体一点。我想从原始指针调用'parse'函数。
funcA(uint8_t* in, int32_t len) {
// I would like to do:
parse(req_, in, in + len);
}
template<typename InputIterator>
std::tuple<result_type, InputIterator> parse(request& req, InputIterator begin, InputIterator end) {
while (begin != end) {
result_type result = consume(req, *begin++);
if (result == good || result == bad)
return std::make_tuple(result, begin);
}
return std::make_tuple(indeterminate, begin);
}
答案 0 :(得分:2)
您不应该尝试强制std::vector::iterator
遍历原始数组。如果您遇到原始数组,但想使用迭代器,那么请使用std::begin
中的std::end
和<iterator>
std::uint8_t buffer[16];
auto it_begin = std::begin(buffer);
auot it_end = std::end(buffer);
答案 1 :(得分:2)
原始指针是一种迭代器。因此,在请求迭代器的任何地方,您始终可以将指针传递到预先分配的缓冲区。
uint8_t buffer[16];
uint8_t* begin = buffer;
uint8_t* end = buffer + 16;
由于你有一个数组类型,你可以使用std::begin
和std::end
来自动查找开始和结束的过程;如果您以后需要更改数组大小,这将使事情变得更容易。
uint8_t* begin = std::begin(buffer);
uint8_t* end = std::end(buffer);
答案 2 :(得分:0)
好的,Ty每一个,它都有效。
uint8_t * buffer_begin = (uint8_t*)in;
uint8_t * buffer_end = ((uint8_t*)in) + len;
std::tie(result, std::ignore) = this_->request_parser_.parse(this_->request_, buffer_begin, buffer_end);