非标准 - 使用'&'创建指向成员的指针

时间:2017-06-08 09:43:26

标签: c++ function object boost

原谅任何无知,我是c ++的新手。

完整的错误消息:

coog.cpp(74): error C3867: 'Manager::start_foo': non-standard syntax; use '&' to create a pointer to member

我正在使用boost命令行,并且我尝试为通知程序传递对象成员函数。我在这里尝试了不同帖子的各种各样的东西和谷歌,但没有运气。错误消息在标题中。

希望这会让你知道我想要做什么:

Manager manager;

void coog::handle::start(std::vector<char const*>& args, Manager& m)
{
    po::options_description desc("Start allowed options");
    desc.add_options()
        ("foo,f", po::value<std::vector<std::string>>()
            ->multitoken()->notifier(m.start_foo), "start foo(s)")
        ("example", "display an example of how to use each command")
        ("help", "display this message")
    ;

    po::variables_map vm;
    po::store(po::command_line_parser(args.size(), args.data()).
        options(desc).run(), vm);
    po::notify(vm);

}

coog::handle::start(foos, manager);

任何帮助和解释都将不胜感激。

1 个答案:

答案 0 :(得分:3)

notifier具有此签名的功能:

typed_value * notifier(function1< void, const T & > f);

你不能只把这个类方法,因为它不适合这个签名,你可以使用boost::bind,lambda或其他东西,这将允许你构造function1上面指定的签名从你的班级方法。

bind的示例:

notifier(boost::bind(&Manager::start_foo, boost::ref(m), _1))

lambda的例子:

notifier([&m](const T& v) { return m.start_foo(v); })

这也取决于start_foo签名,您可能需要绑定更多值。