Объявление использования существующего типа из базового класса против создания псевдонима типа внутри дочернего класса - PullRequest
0 голосов
/ 18 октября 2019

Я хотел бы предоставить доступ к существующему типу из базового класса внутри дочернего класса.

Я нашел два разных способа:

struct A {
    typedef int mytype;
};

struct B {
    typedef double mytype;
};

Я могу "включить" тип с помощьюиспользуя объявление:

struct C : A, B {
    using typename A::mytype;
};

Или я могу создать псевдоним типа:

struct C : A, B {
    typedef A::mytype mytype;
    using mytype = A::mytype; //C++11
};
  1. Есть ли разница?
  2. Каковы плюсы и минусыкаждый синтаксис?
  3. Какой из них является наиболее используемым / рекомендуемым?

Спасибо.

Смежный вопрос: Объявление использования существующего типа пространства именпротив создания псевдонима типа

1 Ответ

2 голосов
/ 18 октября 2019

Есть разница. Подумайте, что произойдет, если ваши структуры A и B были определены как:

struct A {
protected:
    int mytype;
};

struct B {
protected:
    double mytype;
};

В этом случае

struct C : A, B {
    using typename A::mytype;  // Would compile, but is mytype a type or
                               // an exposed member of the base class?
    //using mytype = A::mytype;  // Would not compile
};

В вашем случае я бы порекомендовал использовать using mytype = A::mytype;, так как он менее неоднозначен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...