【发布时间】:2019-04-24 21:43:09
【问题描述】:
我有以下代码:
// 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 的子类型,我可以做所有常规的多态操作吗?
【问题讨论】:
-
我看了你的标题3遍还是没看懂...问题好多了:)
-
@lago 我知道,我真的不知道如何用一句话来形容这个问题..
-
顺便说一句,这可以通过编译器的工作方式来回答。它最初会读取您的代码并将所有 typedef 替换为其原始类型,从而继续编译代码。因此,如果
Derived最初是Base的子类型,那么SM_Derived将是SM_Base的子类型 -
@lago 但是当我执行
std::weak_ptr<SM_Base> m_sm = sm //(sm is a std::shared_ptr<SM_Derived> )时,编译器会抛出错误no match operator =。这是为什么呢? -
哦,模板在 C++ 中是不变的。我不记得了...对不起:(但是,有一个技巧可以解决此错误:cpptruths.blogspot.com/2015/11/…