我对模板没有那么多经验,而且我在团队的代码中发现了一些令我困惑的用法。
假设我有一个基类,其中包含以下两个用于shared_ptr的typedef:
class Foo
{
virtual ~Foo();
virtual void bar() = 0;
};
typedef boost::shared_ptr<Foo> FooPtr1; //this is what i'm used to seeing
typedef boost::shared_ptr<class Foo> FooPtr2; //this is in our codebase
这些typedef之间有什么区别吗?它与派生类的使用有关吗?
答案 0 :(得分:5)
没有区别。
支持语法class Foo
以与struct Foo
保持一致,而{C}兼容性又支持struct
。在C中,S
本身不是一个类型:对应于名为struct S
的结构的类型是typedef
,通常通过{{1}命名}}。在C ++中,不需要typedef
,语法基本上无关紧要。我发现为模板实例化引入“内联”标记类型很有用,例如X< whatever, struct X_tag >
,其中标记类型是不完整类型。但就是这样。