является typedef типом производного типа, рассматриваемым как производный тип типа typedef соответствующего базового типа - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть следующий код:

// Assumption: Base is the base class of Derived

typedef msm::back::state_machine<Base>  SM_Base;
typedef msm::back::state_machine<Derived>  SM_Derived;

Так что SM_Derived является подтипом SM_Base, и я могу выполнять все обычные полиморфные операции?

Ответы [ 2 ]

2 голосов
/ 25 апреля 2019

Введение новых имен через typedef (или using) не влияет на отношения между типами.

Таким образом, вопрос в том, является ли msm::back::state_machine<Derived> подтипом msm::back::state_machine<Base>.

Что это не так.

Вы также можете легко проверить такие вещи с помощью небольшого кода:

#include <iostream>
#include <type_traits>

int main() {
    std::cout << std::is_base_of<SM_Base, SM_Derived>::value;
}
0 голосов
/ 25 апреля 2019

Нет.Это свойство называется ковариация , а параметры шаблона C ++ не имеют его (то есть они инвариантны).

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