【发布时间】:2011-11-09 06:46:37
【问题描述】:
简单地说,做说之间有什么(或有什么)区别
class MyClassList : list<MyClass> { };
对
typedef list<MyClass> MyClassList;
我能想到的唯一优势(以及导致我提出这个问题的原因)是,有了派生类,我现在可以轻松地将 MyClassList 声明为
class MyClassList;
没有编译器错误,而不是
class MyClass;
typedef list<MyClass> MyClassList;
我想不出有什么区别,但这让我想知道,是否存在可以使用 typedef 而简单派生类不能使用的情况?
或者换句话说,有什么理由不改变我所有的 typedef list<...> SomeClassList;到简单的派生类,以便我可以轻松地转发声明它们?
【问题讨论】:
-
该标准禁止使用不完整(前向声明的类型)作为标准容器的类型参数,因此您的第二个示例不正确。
-
@Mark B 你可能是对的,这让我更痛苦的是,如果我不使用派生类,我就不得不改为#include
-
如果你正确地隔离了你的 typedef,额外的包含应该不会花费你太多(你已经不能转发声明
list,因为它在std命名空间中)。
标签: c++ templates forward-declaration