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

C++空类或Type

  •  5
  • gregseth  · 技术社区  · 15 年前

    我现在在代码中使用类似的东西:

    class B : public A<C> { };
    

    使用typedef不是更好吗?

    typedef A<C> B;
    
    7 回复  |  直到 10 年前
        1
  •  16
  •   Jon Purdy    15 年前

    这要看情况而定。如果你想要 A<C> B 不同但相关的类型, 应该延长 A & LT;C> . 如果希望它们相同,则应使用 typedef . 你能提供更多的上下文吗?

        2
  •  4
  •   Mykola Golubyev    15 年前

    这取决于你想要什么。如果使用不同的类自定义模板元编程,那么最好创建 B .

    如果您使用继承只是为了减少类型,而不是一个合适的解决方案,那么您必须 typedef 他们是为此而被介绍的。

        3
  •  2
  •   JRL    15 年前

    最肯定的是,如果目的是为现有数据类型提供一个新名称,那么使用typedef。

        4
  •  2
  •   tony.ganchev    15 年前

    不完全一样。例如,对于typedef,可以执行以下操作:

    typedef A<C> B;
    func(B param) {...}
    ...
    A<C> var;
    func(var);
    
        5
  •  1
  •   KeatsPeeks    15 年前

    取决于你想要什么,效果不一样。

    C++类型DEFS不是“强”,这基本上意味着 B A<C> 将是同一类型。如果你想区分两者,就用一个类。

    在Web上可以找到各种强typedef的实现, the boost one 例如。

        6
  •  1
  •   batbrat    15 年前

    好吧,我想你是在用空类来避免打字 A<C> 反复地。在这种情况下,我认为typedef是一个更好的主意。至少,这似乎是最常做的事情。

    让我补充一下,这只是我的意见。一般来说,人们不太同意使用typedef。尽管我认为在这种情况下很好。

    在阅读了Jon Purdy的答案之后,我想补充一下,如果需要扩展而不是扩展,您应该使用继承。

        7
  •  0
  •   imix    10 年前

    为了完整性,我想添加另一点:与

    class B : public A<C> { };
    

    您可以轻松转发声明B:

    class B;
    void func(B param);