【发布时间】:2019-11-18 12:37:52
【问题描述】:
我在 std::string 构造函数中使用 boost::asio::buffers_iterator:
std::unique_ptr<boost::asio::streambuf> receiveBuf;
size_t length = <>; // calculate length
...
std::string message(boost::asio::buffers_begin(receiveBuf->data()),
boost::asio::buffers_begin(receiveBuf->data()) + length);
代码工作正常,但覆盖率抱怨:
(1) Event no_matching_constructor: no instance of constructor "std::__cxx11::basic_string<_CharT, _Traits, _Alloc>::basic_string [with _CharT=char, _Traits=std::char_traits<char>, _Alloc=std::allocator<char>]" matches the argument list
(2) Event caretline: ^
(3) Event argument_list_types_add_on: argument types are: (boost::asio::buffers_iterator<boost::asio::const_buffers_1, char>, <error-type>)
那么,我想知道,如何正确地转换 boost 的迭代器?
更新 在@Caleth 指出+ 长度 之后,结果却不是那么明显。我必须承认我过度简化了我的示例代码(以便专注于最相关的部分),因此以错误的方式制作它。很抱歉造成混淆,但对于上面显示的示例,coverage 是无声的。当拼图中还有一块时,它会抱怨:
std::unique_ptr<boost::asio::streambuf> receiveBuf;
size_t length = <>; // calculate length
size_t delimSize = <>; // delimiter size
...
std::string message(boost::asio::buffers_begin(receiveBuf->data()),
boost::asio::buffers_begin(receiveBuf->data()) + length - delimSize);
所以,它看起来迭代器可以高级(运算符+重载?)但不能减去(好吧,代码编译和工作,但至少覆盖性不好)......
【问题讨论】: