【问题标题】:How to initialize boost::process::child(boost process 0.5)?如何初始化 boost::process::child(boost process 0.5)?
【发布时间】:2014-11-12 06:05:58
【问题描述】:

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

操作系统:win7 64位 编译器:msvc2008 32bits 提升: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;
    }    
}

如果我不想使用执行来初始化子节点,我该如何初始化它?

伪代码:

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' : 没有合适的默认构造函数可用

【问题讨论】:

  • 也许遵循 C++ 的哲学,你应该有一个初始化 child_public: process_manager(Args...) : child_(Args...){} 的构造函数。还有一个空的析构函数?

标签: c++ boost


【解决方案1】:

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

例如

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_;
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    • 1970-01-01
    • 2018-07-21
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多