gpt4 book ai didi

c++ - 可以比较两个指向成员函数的指针是否相等吗?

转载 作者:太空狗 更新时间:2023-10-29 20:33:04 24 4
gpt4 key购买 nike

我已经问了 similar question早些时候,但我现在意识到它不够具体。

我想做的是找出两个指向一个类的某个成员函数的指针,结合该类的一个实际对象,是否相等,因为两者都将“调用”(在下面描述的意义上)同一个对象的同一个功能。基本上,在这段代码中:

bool isEqual(F* object1, void(F::*_fct1)(), 
F* object2, void(F::*_fct2)())
{
TSpecificFunctor<F> specFunc1(object1, fct1);
TSpecificFunctor<F> specFunc2(object2, fct2);

return /* Something */;
}

如果 specFunc1specFunc2 指向同一个给定对象的相同成员函数?

那里,TSpecificFunctor定义如下:

class TFunctor
{
public:
virtual void call() = 0;
};

template <class TClass> class TSpecificFunctor : public TFunctor
{
public:
TSpecificFunctor(TClass* _pt2Object, void(TClass::*_fpt)())
{
pt2Object = _pt2Object;
fpt=_fpt;
}

virtual void call() override
{
(*pt2Object.*fpt)();
}

private:
void (TClass::*fpt)();
TClass* pt2Object;
};

换句话说,该函数应该返回 true iff specFunc1.call() 将产生与 specFunc2.call() 完全相同的结果>.

编辑:例如,这可能是我正在努力实现的应用:

class TClassB {
public:
TClassB() {...}

void doSomething()
{
...
}

void doSomethingElse()
{
...
}

private:
/* Some object-specific stuff. */
};

TClassB test;
isEqual(&test, &TClassB::doSomething, &test, &TClassB::doSomething); // ==> true
isEqual(&test, &TClassB::doSomething, &test, &TClassB::doSomethingElse); // ==> false

最佳答案

您可以比较两个指向 F 实例的指针,也可以比较指向成员的指针。这是正确的做法:

bool isEqual(F* object1, void(F::*_fct1)(), 
F* object2, void(F::*_fct2)())
{
return object1 == object2 && _fct1 == _fct2;
}

是否实际调用一个或另一个以产生相同结果状态的顺序是另一个问题。如果有问题的成员函数没有副作用,就是这种情况。但他们也可以修改全局或以某种方式共享的状态。

关于c++ - 可以比较两个指向成员函数的指针是否相等吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57460240/

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