c++ - 如何使用 boost::bind 从参数中动态提取数据

标签 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 的类型是一个模板。

最佳答案

你只需要另一个绑定(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/

相关文章:

c++ - 来自 boost Spirit 解析器的触发警告

c++ - 在 C++ Win x64 应用程序中包含 boost 库

c++ - GDB:我们如何从 std::tuple 中提取值

c++ - 从 int[] 转换为 list<int> : Any better way

c++ - 为什么这个 constexpr 代码会导致 GCC 吃掉我所有的 RAM?

c++ - 我可以使用 Boost program_options 获取多个任意键值对吗?

c++ - 哪些开源 C++ 项目有很好的(鼓舞人心的)测试?

c++ - 重用左值和右值的代码

c++ - 是否可以利用 is_trivially_copy_assignable 和 is_trivially_copy_constructible 进行优化?

c++ - Boost.Graph:使用名称保存和加载 boost::adjacency_list