原谅任何无知,我是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);
任何帮助和解释都将不胜感激。
答案 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
签名,您可能需要绑定更多值。