【问题标题】:What is the simplest way to "cast" a member function pointer to a function pointer in C++?在 C++ 中将成员函数指针“强制转换”为函数指针的最简单方法是什么?
【发布时间】:2011-03-18 06:09:57
【问题描述】:

我想为 STL 算法的“comp”参数提供一个成员函数,例如 lower_bound(..., Compare comp)。 comp() 函数访问的是非静态成员字段,因此它本身必须是非静态成员,但非静态成员函数指针的类型与普通函数指针的类型不同。

解决这个问题的最佳方法是什么?

【问题讨论】:

  • 你要google的词是“函子”
  • 或者一个函数对象,或者使用 C++11,一个 lambda/匿名函数 :)

标签: c++ function pointers member


【解决方案1】:
#include<tr1/functional>

并使用 mem_fn()

【讨论】:

    【解决方案2】:

    这是std::mem_funstd::mem_fun_ref 最常见的用法。它们是创建调用指定成员函数的函子的模板。 TR1 添加了一个std::tr1::bind,它也很有用且用途更广泛(如果您没有可用的 TR1,则基于 Boost::bind)。 C++0x 将在标准库中包含 std::bind(与 TR1 基本相同)。

    【讨论】:

    • mem_fun() 仅适用于具有一个或没有参数的函数,而 comp 必须指向具有两个参数的函数。 Qt 中是否提供此功能?
    • mem_fun 也不适用于具有引用参数的函数 :( 如果您使用 mem_fun_ref 然后尝试将其与 bind1stbind2nd 结合使用,它会再次失败,因为它们只是坏了。我建议完全更改为boost::bindboost::function
    • 对于像我这样迟到的人:避免使用已弃用的mem_funmem_fun_ref;切换到mem_fn详情: stackoverflow.com/questions/11680807/stdmem-fun-vs-stdmem-fn
    • 或者更好的是,在 OP 的情况下,使用 lambda 函数。
    【解决方案3】:

    听起来您想要boost::bind 之类的东西,将成员函数指针绑定到该类的实例。

    您是否愿意详细说明您要做什么?示例代码等?

    【讨论】:

    • Boost 绑定绝对是最灵活的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 2011-09-22
    • 2012-01-10
    • 2012-11-21
    • 1970-01-01
    相关资源
    最近更新 更多