如何使用notifier()和composing()?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用notifier()和composing()?相关的知识,希望对你有一定的参考价值。

我有C ++代码,它使用以下方面的选项声明:

boost::program_options::option_descriptions::add_options()

我需要为正则表达式和其他检查添加每个选项值的检查。

我决定使用notifier()来达到这个目的。例如:

add_options()
("myoption", bpo::value<string>()->notifier(param_validator()), "My option description")
;

其中param_validator是功能对象,它验证选项值。

我有另一个选项,已经使用composing()例如:

("myoption2", bpo::value<string>()->composing(), "My option 2 description")

为同一选项调用notifier()的语法是什么?或者可以根据这个选项调用notifier()?

答案

composing成员有一个notifier成员。所以你只需要从notifier打电话给composing。工作范例:

#include<string>
#include<iostream>
#include <boost/program_options.hpp>
namespace po = boost::program_options;

#include <iostream>
#include <iterator>

int main()
{
    using str_vect_type = std::vector<std::string>;
    size_t cmdcnt = 5;
    const char* cmdline[] = { "dmy.exe", "--myoption", "this_that", "--myoption2", "testing" };
    auto param_validator = [](const std::string& x) {std::cout << " " << x <<  "
param_validator
"; };
    auto other = [](const str_vect_type& x) {for (auto& s : x)std::cout << " " << s << '
'; std::cout << "the_other
"; };
    po::variables_map vm;
    try {

        po::options_description desc("Allowed options");
        desc.add_options()
            ("myoption", po::value<std::string>()->notifier(param_validator), "My option description")
            ("myoption2", po::value<std::vector<std::string> >()->composing()->notifier(other), "My option 2 description")
            ;
        po::store(po::parse_command_line(cmdcnt, cmdline, desc), vm);
        //as if from ini file hack...
        const_cast<str_vect_type*>(&vm["myoption2"].as<str_vect_type>())->push_back("another");
        po::notify(vm);
    }
    catch (std::exception& e) {
        std::cerr << "error: " << e.what() << "
";
        return 1;
    }
    return 0;
}

以上是关于如何使用notifier()和composing()?的主要内容,如果未能解决你的问题,请参考以下文章

我如何脱离notifier.watch

如何使用wait(), notify() and notifyAll() – Java

如何只允许 Paypal 请求我的 notify_url?

如何在没有IllegalMonitorStateException的Java中使用wait和notify?

如何在 Windows 10 上修复 Python 3 中的 notify2 'dbus' 错误

java中使用wait()和notify()的简单场景