我常常看到声明开头的cpp类有这个写的
typedef base_type data_type
据我所知,这与使你的类与向量兼容有关。谁能指导我?
谷歌搜索这也将为您提供数百个使用此声明的链接。
答案 0 :(得分:0)
typedef typename Base<T>::Foo Foo
是模板编程的常用技术。
由于Base<T>
取决于模板参数T
,编译器无法知道对于任何特定类型T
Base
是否专用,以便Foo
1}}不是一种类型(或根本不存在)。
所以你必须告诉编译器它应该假设Foo
是一个类型。
这很麻烦,是的。
但是模板非常有用,所以非常值得一点麻烦。 :)
除了上述内容之外,typedef
只引入了一个替代名称,与原始名称只有非常细微的差别。
例如,给定int x = 42;
语句x.~int();
无效,但typedef int Int; x.~Int();
没问题。
另一个微妙的区别是构造函数和析构函数的定义,你必须使用原始的类名。
在C ++ 11中,您可以使用using
,其方式与typedef
非常相似,例如using Int = int;
。