boost :: function的向量不能与_placeholder

时间:2018-02-10 22:04:02

标签: c++11 vector boost function-pointers

我需要你的帮助。我尝试了很多方法来找到问题的解决方案但到目前为止失败了。

创建"命令元组"的向量如下:

typedef boost::tuple<std::string, boost::function<void()>> command_tuple;

std::vector<command_tuple> commands {
  boost::make_tuple("command1", boost::bind(&myclass::command1, this))
};

如果使用字符串"command1",则调用void command1()函数。 ID索引值基于find_if在向量上搜索字符串("command1"ID=0)。

这很好用!

boost::get<1>(commands[ID])();

问题:

到目前为止,我找不到使用任何类型的函数参数定义的boost :: function(指针)向量:

typedef boost::tuple<std::string, boost::function<void(const char *)>> command_tuple;

std::vector<command_tuple> commands {
  boost::make_tuple("command1", boost::bind(&myclass::command1, this, std::placeholders::_1))
};

这将失败,无法转换std :: _ Placeholder&lt; 1&gt;输入const char * 编译错误。

因此不可能:

boost::get<1>(commands[ID])("dynamic string argument");

确定问题:

嗯...所以我发现到目前为止,即使是一个简单的boost :: function向量似乎也不起作用(在我尝试使用它的方式):

std::vector<boost::function<void(const char *)>> commands {
  boost::bind(&myclass:command1, this, std::placeholders::_1)
};

失败并出现相同的编译错误。

可以用&#34;静态字符串常量替换std :: placeholders :: _ 1&#34;避免任何编译错误。但我的想法是使用&#34;动态字符串参数&#34;。

有人可以给我一个快速暗示我做错了什么或者可能会显示一些简单的替代品。我希望有一个很大的函数指针列表,我可以根据它们的&#34;字符串名称&#34;来调用。

  

我只是想避免一个大的开关选择案例&#34;样式代码块   根据动态&#34;输入字符串&#34;选择要执行的功能。

谢谢你的时间!

1 个答案:

答案 0 :(得分:0)

像T.C.在评论中回复。你永远不应该混合使用std :: bind,std :: placeholders和boost :: bind。