如何在使用接口时避免向下转型?我已经阅读了一些stackoverflow上的答案,如果你必须向下转型,那么你很可能有一个弱接口。那么你们是如何处理它的,什么是正确的方式?我有一个具体的例子,我想知道如何避免向下转型。在我的例子中,我有一个用于传递数据的接口,但具体实现可能包含独特的属性。在A类和B类中,我需要向下转型为DataType1或DataType2,因为它们可能返回不同类型的属性。
struct IData
{
virtual ~IData();
};
struct IAction
{
virtual ~IAction();
virtual void setup(IData& data) = 0;
};
class DataType1 : public IData
{
int data1;
public:
DataType1();
int getData1();
};
class DataType2 : public IData
{
std::string data2;
public:
DataType2();
std::string getData2();
};
class A : public IAction
{
public:
A();
void setup(IData& data) override;
}
class B : public IAction
{
public:
B();
void setup(IData& data) override;
}
IData
应该提供所需的方法(可以返回数据,或返回另一个返回数据的接口)。 - M.MIData
将是一个固定的类型。然后你就可以避免向下转换。 - Galik