gpt4 book ai didi

c++ - 避免类范围,以便将成员函数作为函数指针传递

转载 作者:太空宇宙 更新时间:2023-11-04 15:14:24 25 4
gpt4 key购买 nike

我将使用以下示例代码描述我的问题。

我将类 B 定义如下:

class B
{
public:
inline B(){}
inline B(int(*f)(int)) :myfunc{ f }{}
void setfunction(int (*f)(int x)) { myfunc = f; }
void print(int number) { std::cout << myfunc(number) << std::endl; }
private:
int(*myfunc)(int);
};

然后我定义类 A 如下:

class A
{
public:
A(int myint) :a{ myint }{ b.setfunction(g); }
int g(int) { return a; }
void print() { b.print(a); }

private:
B b;
int a;
};

对我来说,问题似乎是成员函数 g 具有签名 int A::g(int)而不是 int g(int) .

是否有一种标准方法可以使上述工作正常进行?我想这是一个非常通用的设置,因为我们有一个类(B 类)包含执行某些操作的某种成员函数,并且我们有一个需要使用类的特定成员函数的类(A 类) B -- 是不是我的设计错了,如果错了,表达这个想法的最佳方式是什么?

最佳答案

你可以使用 std::function:

class B
{
public:
inline B() {}
inline B(std::function<int(int)> f) : myfunc{ f } {}
void setfunction(std::function<int(int)> f) { myfunc = f; }
void print(int number) { std::cout << myfunc(number) << std::endl; }
private:
std::function<int(int)> myfunc;
};

class A
{
public:
A(int myint) :a{ myint } {
b.setfunction([this](int a) {
return g(a);
}
);
}
int g(int) { return a; }
void print() { b.print(a); }

private:
B b;
int a;
};

关于c++ - 避免类范围,以便将成员函数作为函数指针传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38506259/

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