Код: Выделить всё
#include
#include
#include
namespace sys = boost::system;
namespace v2 = boost::process::v2;
namespace fs = boost::filesystem;
namespace asio = boost::asio;
using launcher_type = v2::posix::default_launcher;
using pathname_type = fs::path;
using args_type = char* const*;
const fs::path null_cmd = v2::environment::find_executable("true");
std::initializer_list args{};
size_t last_local_event = 0;
struct hooks {
sys::error_code on_setup(launcher_type &, const pathname_type &, const args_type &) {
last_local_event = 1;
return sys::error_code{};
}
};
auto main() -> int {
asio::io_context context;
sys::error_code ec{};
launcher_type launch{};
hooks init{};
v2::process p = launch(
context, ec,
null_cmd,
args,
std::move(init)
);
context.run();
p.wait(ec);
assert(last_local_event == 1);
}
После взгляда на исходный код Boost.process, я считаю, что мой вызов on_setup следует заменить и вызвать во время запуска on_setup , как это было предоставлено с помощью инициализатора инициализатора , когда был вызван объект запуска процесса. Функция on_setup Соответствует функции, которая ожидается для on_setup с пользовательским инициализатором в процессе усиления на Linux. Подписи функций, по -видимому, соответствуют, и все же мой пользовательский инициализатор не используется для процесса. Вызов Assert вызов в моем примере кода. Значение fast_local_event не было изменено моей пользовательской функцией on_setup .
Есть ли здесь что -то, что мне не хватает, например, как применять шаблонные замены для пользовательского повышения. Был вызов из предоставленного init ? Компилятор может дать некоторую информацию о том, почему замена не работает?
Код: Выделить всё
using args_type = char* const*;
< /code>
, как используется в методе < /p>
sys::error_code on_setup(launcher_type &, const pathname_type &, const args_type &)
struct hooks {
// [sic]
template
sys::error_code on_setup(L&, const pathname_type&, const char*const*&) {
event_flag = true;
return sys::error_code{};
}
};
Это также работает, хотя он может быть немного менее портативным, при определении on_setup крючком без шаблона для запуска Arg:
Код: Выделить всё
struct hooks {
// [sic]
sys::error_code on_setup(launcher_type&, const pathname_type&, const char*const*&) {
event_flag = true;
return sys::error_code{};
}
};
Код: Выделить всё
using const_args_type = const char* const*;
Подробнее здесь: https://stackoverflow.com/questions/796 ... st-process
Мобильная версия