如何使用boost :: bind从参数中提取数据

时间:2014-06-05 11:13:33

标签: c++ c++11 boost

假设您正在将函数传递给函数:

foo(boost::bind( &CLASS_NAME::OnValueChanged, this, _1));

但问题是_1类型可能会有所不同,我真的不需要它,只需要它的数据。所以我想写这样的东西:

foo(boost::bind( &CLASS_NAME::OnValueChanged, this, _1.GetName()));

因为无论_1是什么类型,我都知道每次有GetName()方法,结果类型都相同(wstring)。

怎么做?

此外,在我的情况下,持有GetName的类型是模板。

1 个答案:

答案 0 :(得分:1)

你只需要另一个绑定!

foo(boost::bind( &CLASS_NAME::OnValueChanged, this, boost::bind(GetNameFunctor(), _1));

GetNameFunctor()的通用实现看起来就像是。

struct GetNameFunctor {
     typedef std::string result_type;

     template <typename T> std::string operator()(T const& o) const {
         return o.GetName();
     }
};

如果您想在此处获得更多控制/支持,可以查看