我正在尝试构建Boost 网站上显示的一些示例代码,但所使用的成员函数似乎不属于 Boost:
#include <string>
#include <iostream>
#include <boost/asio.hpp>
#include <boost/asio/error.hpp>
#include <boost/asio/readable_pipe.hpp>
#include <boost/process/v2/process.hpp>
#include <boost/process/v2/stdio.hpp>
#include <boost/version.hpp>
int main()
{
using namespace boost;
using namespace boost::process::v2;
asio::io_context ctx;
asio::readable_pipe rp{ctx};
boost::process::v2::process proc(ctx, "/usr/bin/g++", {"--version"}, process_stdio{{ /* in to default */}, rp, { /* err to default */ }});
std::string output;
system::error_code ec;
rp.read(asio::dynamic_buffer(output), ec); // <-- error, line 44
assert(ec == asio::error::eof);
proc.wait();
}
这是错误信息:
error: ‘boost::asio::readable_pipe’ {aka ‘class boost::asio::basic_readable_pipe<>’} has no member named ‘read’
44 | rp.read(asio::dynamic_buffer(output), ec);
在文档中我注意到类似的成员函数read_some()
和async_read_some()
,但没有read()
。
这可能是示例中的错误,还是我遗漏了什么?
文档示例来自这里: https: //github.com/boostorg/process/blob/develop/example/stdio.cpp#L19-L30
它通过https://github.com/boostorg/process/blob/develop/doc/stdio.adoc?plain=1#L10-L17自动链接到该文档页面
我想象其中存在一些复制粘贴错误。
因为
asio::readable_pipe
模型SyncReadStream
这样的组合操作asio::read
确实支持它。更新
该文档最近已修复:https://github.com/boostorg/process/commit/3fd8b2608cca 3cd7a6359110f9fc29075df42519
在此日期之前,这些示例被硬编码到文档中,这意味着它们不一定保持最新。