我有一个boost :: function对象的定义:
typedef boost::function<std::string (std::string, std::string)> concat;
我将此函数作为结构构造函数参数传递:
struct add_node_value_visitor : boost::static_visitor<>
{
typedef boost::function<std::string (std::string, std::string)> concat;
add_node_value_visitor(concat _func, std::string key) : _func_concat(_func), _key(key) {}
template <typename T>
void operator() ( const T& value) const
{
std::string result = _func_concat(boost::lexical_cast<std::string, T>(value), _key);
}
std::string _key;
concat _func_concat;
};
现在我需要将struct add_node_value_visitor
传递给以下函数,但是boost::function<T>
不接受2 arg成员函数,在文档中它说我应该使用boost :: bind,但是我但是我不确定我是怎么做的,看到我还必须满足我的boost :: apply_visitor功能。
boost::apply_visitor( add_node_value_visitor( &Decomposer::ConcatValues, key), var); // ConcatValues takes 2 args, var = boost::variant
std::string ConcatValues(std::string str, std::string key);
任何想法?
答案 0 :(得分:3)
如果没有看到ConcatValue的声明,很难准确,但你需要这样的东西:
boost::bind(&Decomposer::ConcatValues, some_decomposer_instance, _1, _2)
答案 1 :(得分:1)
您需要提供Decomposer对象的实例,如下所示:
boost::apply_visitor( add_node_value_visitor( boost::bind( &Decomposer::ConcatValues, yourDecomposer, _1, _2 ), key), var);
答案 2 :(得分:1)
答案取决于ConcatValues
到底是什么。我猜它实际上是Decomposer
类的非静态成员函数,因此它实际上并不期望两个但三个参数:两个字符串和{调用它的{1}}实例(Decomposer
)。
Boost.Bind确实是一个解决方案,因为它可以帮助你绑定成员函数的第一个参数到this
实例,并转发传递的两个Decomposer
:
std::string