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
使用许多不同的成员变量进行了一些复杂的计算,而我只想得到结果
答案 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();
请注意使用。*和-> *运算符