gpt4 book ai didi

c++ - 如何初始化boost::process::child(boost process 0.5)?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:44:40 25 4
gpt4 key购买 nike

我想存储 boost::process 的子进程,但不知道如何初始化它

操作系统:win7 64位编译器:msvc2008 32位 boost :1_55_0

简化后的例子

#include <boost/process/initializers.hpp>
#include <boost/process.hpp>

#include <boost/system/system_error.hpp>

#include <iostream>

void test_boost_system()
{
namespace bp = boost::process;
namespace bpi = boost::process::initializers;

//bp::child child; //#1

boost::system::error_code ec;
bp::child child_2 = bp::execute(bpi::run_exe("ldapInterface.exe"), bpi::set_on_error(ec));
if(ec.value() != 0){
std::cout<<ec.message()<<std::endl;
}else{
std::cout<<"success"<<std::endl;
}
}

如果我不想使用 execute 就地初始化它,我该如何初始化它?

伪代码:

namespace bp = boost::process;
namespace bpi = boost::process::initializers;

class process_manager
{
public:
~process_manager() { bp::terminate(child_); }

void open_process(std::string const &process)
{

child_ = bp::execute(bpi::run_exe(process)); //compile error
}

private:
bp::child child_;
};

错误信息:错误 C2512:“boost::process::windows::child”:没有合适的默认构造函数可用

最佳答案

使用允许延迟初始化的包装器。

例如

class process_manager
{
public:
~process_manager() { if (child_) bp::terminate(*child_); }

void open_process(std::string const &process)
{
child_ = bp::execute(bpi::run_exe(process)); //compile error
}

private:
boost::optional<bp::child> child_;
};

关于c++ - 如何初始化boost::process::child(boost process 0.5)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26880356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com