假设您将一个函数传递给一个函数:
foo(boost::bind( &CLASS_NAME::OnValueChanged, this, _1));
但问题是 _1
类型可以变化,我真的不需要它,只需要它的一个数据。所以我想写这样的东西:
foo(boost::bind( &CLASS_NAME::OnValueChanged, this, _1.GetName()));
因为不管_1
是什么类型,我知道每次它都有GetName()
方法,而且结果类型都是一样的(wstring
)。
怎么做?
此外,在我的例子中,持有 GetName
的类型是一个模板。
最佳答案
你只需要另一个绑定(bind)!
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();
}
};
如果你想要更多的控制/支持,你可以看看
关于c++ - 如何使用 boost::bind 从参数中动态提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24058719/