我有以下代码:
// 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
的子类型,我可以执行所有常规多态操作吗?
答案 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 ++模板参数没有此属性(即它们是不变的)。