gpt4 book ai didi

c++ - C++中指向成员函数的函数指针

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:44:41 27 4
gpt4 key购买 nike

我需要调用一个需要函数指针的方法,但我真正想传递给它的是一个仿函数。这是我正在尝试做的一个例子:

#include <iostream>
#include "boost/function.hpp"

typedef int (*myAdder)(int);

int adderFunction(int y) { return(2 + y); }

class adderClass {
public:
adderClass(int x) : _x(x) {}
int operator() (int y) { return(_x + y); }

private:
int _x;
};

void printer(myAdder h, int y) {
std::cout << h(y) << std::endl;
}

int main() {
myAdder f = adderFunction;

adderClass *ac = new adderClass(2);
boost::function1<int, int> g =
std::bind1st(std::mem_fun(&adderClass::operator()), ac);

std::cout << f(1) << std::endl;
std::cout << g(2) << std::endl;
printer(f, 3);
printer(g, 4); // Is there a way to get this to work?
}

我一直没能找到让最后一行 printer(g, 4) 进行编译的方法。有没有办法让它工作?我能控制的只有方法“main”和类“adderClass”。

最佳答案

好的,这是另一个尝试:

class CallProxy
{
public:
static adderClass* m_instance;
static int adder(int y)
{
return (*m_instance)(y);
}
};

adderClass* CallProxy::m_instance = NULL;


int main() {
myAdder f = adderFunction;

adderClass ac(2);

std::cout << f(1) << std::endl;
std::cout << ac(2) << std::endl;
printer(f, 3);
CallProxy::m_instance = &ac;
printer(CallProxy::adder, 4);
}

问题是您将 printer 编译为必须接收一个函数指针而没有其他任何东西,因此您必须向它发送一个函数指针。使用函数指针,您没有人可以保存您的实例。因此,此解决方案通过使用静态数据成员来实现。

请注意,这使得这段代码不是线程安全的。同时执行 main 的两个线程可能会在 m_instance 中放入两个不同的东西。

关于c++ - C++中指向成员函数的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1888184/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com