是派生类型的typedef类型被视为对应基本类型的typedef类型的派生类型

时间:2019-04-24 21:43:09

标签: c++ boost

我有以下代码:

// 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_DerivedSM_Base的子类型,我可以执行所有常规多态操作吗?

2 个答案:

答案 0 :(得分:2)

通过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;
}

答案 1 :(得分:-1)

不。此属性称为covariance,而C ++模板参数没有此属性(即它们是不变的)。