c++ - 如何在另一个类或结构中使用类函数指针?

标签 c++ function pointers function-pointers

我需要在另一个类中使用一个类中定义的函数。我没有重写整个函数,而是尝试将函数作为指针传递,如下所示:

class C {
  public:
    int get(int x) { return x*x; }
};

struct S {
    int (*func) (int x);
};

int main() {
    C c;
    S s;

    cout << c.get(3) << endl;

    s.func = &C::get;
    cout << s.func(3) << endl;

    return 0;
}

这不起作用并给出以下错误:

func_ptr.cpp: In function ‘int main()’:
func_ptr.cpp:42:18: error: cannot convert ‘int (C::*)(int)’ to ‘int (*)(int)’ in assignment

是否可以做这样的事情,如果可以,我该如何解决?此外,如果可能的话,我可以使用对象实例中的指针而不是类吗?也就是说,可能使用在特定类实例中定义的变量。谢谢。

最佳答案

C::get()是一个非静态成员函数,这意味着它必须在 C 的实例上调用.它有一个隐含的第一个参数,this指针,在调用函数时必须传递给它。

由于您的 C::get()似乎不需要访问 C 的任何数据成员, 你可以把它变成 static成员函数。

static int get(int x) { return x*x; }

现在您的代码将按原样运行。


另一种选择是更改 func所以它是指向 C 的成员函数的指针

struct S {
    int (C::*func) (int x);
};

并将其调用为

s.func = &C::get;
std::cout << (c.*(s.func))(3) << std::endl;

另一种选择是更改 S::func 的类型至 std::function<int(int)> .现在它可以容纳任何接受单个 int可调用(函数指针、仿函数、lambda)作为参数,并返回 int .

struct S {
    std::function<int(int)> func;
};

s.func = std::bind(&C::get, &c, std::placeholders::_1);
std::cout << s.func(3) << std::endl;

关于c++ - 如何在另一个类或结构中使用类函数指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24372134/

相关文章:

android - 如何使用 Boost Asio 在 Android 上获取我的本地 udp ip 地址?

c++ - 引脚二进制检测 : How to precisely identify a function name.

r - ggfortify::autoplot 或 ggfortify::::autoplot 不工作

java - Java内置函数

c - 为什么我得到 "dereferencing pointer to incomplete type"?

c++ - 用蒙特卡洛方法估计 Pi,循环似乎提前终止

c++ - 您如何才能准确地看到内存泄漏的内容?

php函数导致sql查询失败

c++ - 使用指针翻转数组

c - 指向结构或结构本身的指针?