Как избежать даункинга - PullRequest
0 голосов
/ 22 мая 2018

Как вы собираетесь предотвращать даункастинг при использовании интерфейсов?Я прочитал некоторые ответы на stackoverflow, что, если вам нужно снизить производительность, скорее всего, у вас слабый интерфейс.Как вы, ребята, делаете это тогда, и как правильно?У меня есть конкретный пример, и мне было интересно, как я могу правильно избежать удручения.В моем примере у меня есть интерфейс для передачи данных, но конкретная реализация может содержать уникальные атрибуты.В классах A и BI необходимо будет уменьшить значение до 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;
}
...