我有以下设置:
class ComponentBase...
class A : public ComponentBase...
class B : public ComponentBase...
class C : public ComponentBase...
....
class ComponentOwner
{
public:
ComponentBase *b;
ComponentOwner(ComponentBase *newb) : b(newb) {};
bool couple(ComponentOwner *other)
{ //this in a non-header file, obviously
return couple(b, other->b);
};
....
}
对于ComponentBase子类的每种组合,都有重载的函数,每个子类返回相同的类型并采用相同类型的参数,例如:
bool couple(A, A);
bool couple(A, B);
bool couple(B, A); //should point to couple(A,B)
....
遗憾的是,这不起作用,因为我无法在不知道如何进行强制转换的情况下访问ComponentBase指针的类型。
我想我的问题是:我该如何将两个类型未知的基本指针重定向到其类型所在的函数,并为子类(如枚举)提供尽可能少的额外定义?
谢谢。
编辑1:
有人建议我在ComponentBase中添加虚拟功能。
class ComponentBase
{
public:
virtual bool couple(ComponentBase *other) = 0;
.....
}
class A : public ComponentBase
{
public:
bool couple(ComponentBase *other)
{
直到这儿我都了解提案吗?我该如何解决其他类型?