指向其他实例成员函数的函数指针

时间:2020-03-29 20:14:53

标签: c++ member-function-pointers

class A
{
private:
    int _i;

    int calc() { return i; }

public:
    int (*get)() = &A::calc;

    A(int i){ _i = i; }
    A(A *a ) { get = a->get; }
};

int main(){
    A a = new A(5);
    A b = new A(a)
}

嗨,我想我有一个特殊的问题。我不知道正确的标签,所以我尽量描述一下:

有一个类A,具有函数calc和函数指针get,它们具有相同的calc占用空间。通常,get应该引用其自身实例的calc,但是对于特殊情况,应该将其重定向到其他实例的calc。有办法实现吗?

谢谢。 (语法是伪代码)

edit:背景是calc使用许多不同的成员变量进行了一些复杂的计算,而我只想得到结果

1 个答案:

答案 0 :(得分:2)

确定:

std::function<int()> get = std::bind(&A::calc, this);

以后,您可以将其更改为指向其他实例“ b”:

get = std::bind(&A::calc, &b)

还请注意,当您尝试将成员函数指针(&A :: calc)分配给普通函数指针(int(*)())时,代码将无法编译。声明成员函数指针的语法为int(A :: * get)(),但是如果您手边有一个实例,那么您将只能调用该成员函数指针(除非像解决方案中那样绑定它)我在上面提供了)。

instance.*get();

or

pointer ->* get();

请注意使用。*和-> *运算符