代码之家  ›  专栏  ›  技术社区  ›  abraham_hilbert

包裹式铸造

  •  0
  • abraham_hilbert  · 技术社区  · 8 年前

    class A {};
    
    class B : public A {};
    
    void foo( A ) {}
    
    
    int main() {
      B b;
    
      foo( b );
    }
    

    class A {};
    
    class B : public A {};
    
    template< typename T >
    class wrapper {};
    
    void foo( wrapper<A> ) {}
    
    int main() {
      wrapper<B> b;
    
      foo( b );
    }
    

    第二个代码(即未编译的代码)中唯一的区别是类 A B wrapper ; 令人惊讶的是,包装似乎阻碍了从 B .

    如果有人能帮我修复第二个代码,那也太好了。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Aganju    8 年前

    class B 派生自 class A ,所以每个 B A 可以在其位置使用。然而 wrapper<A> wrapper<B> -为什么会这样?

    考虑这个例子:如果B是A的儿子,B的妻子会是A的儿子吗。

    包装器(<);B> 从…起 ,这是不可能的 wrapper<> 作为模板类。考虑其他方法,您可以在哪里发送 进入方法 包装器(<);A> 等级或类似(工程 A. ).