我需要从类外的某个对象上调用“声明”类型的函数。我做了一个小代码示例并将所需的行为作为注释,因为我不知道如何问这个:)
template<typename T>
void hun(T* obj, class C* c)
{
//do some checking on c
if(some conditions from c are true)
{
//call fun from T ignoring it's virtual
}
}
struct A
{
virtual void fun(){};
virtual void gun(class C* c)
{
//do something specific to A
hun(this, c); //here call fun from A even if real type of this is B
};
}
struct B : public A
{
void fun(){};
void gun(class C* c)
{
//do something specific to B
hun(this, c);//here call fun from B even if real type of this is something derived from B
};
}
是否有可能实现这种行为?
我知道我可以fun()
使用A::fun()
or从类内部调用B::fun()
,但是检查 fromhun()
对于所有类都是常见的,我不想gun()
用这段代码污染。