假设我有一个std :: vector的std :: strings.
// Foo.h class Foo { std::vector< std::string > mVectorOfFiles; }
然后我使用typedef使它成为StringVector类型.
// Foo.h typedef std::vector< std::string > StringVector; class Foo { StringVector mVectorOfFiles; }
如果我有另一个采用StringVector对象的类…
// Bar.h class Bar { Bar( const StringVector & pVectorOfFiles ); // I assume this produces a compile error (?) since Bar has no idea what a StringVector is }
…我必须在Bar的头文件中再次使用typedef吗?
// Bar.h typedef std::string< std::vector > StringVector; class Bar { Bar( StringVector pListOfFiles ); }
是否可以放置typedef std :: vector< std :: string> StringVector在一个文件中并且让其他所有类都知道StringVector类型?
解决方法
#include“Foo.h”的所有文件都得到了typedef.所以不,你不必在每个文件中复制它(只要它包含Foo.h.如果符合你的需要,你可以将typedef放在一个专用的文件中.在你的情况下,这是有意义的,并且将是一个改进,因为Bar.h不应该依赖于Foo.h具有typedef和必要的包含这一事实.
我会保持简单,并将其限制为一种类型,但要包含在使用该类型的所有文件中:
// StringVector.h #ifndef STRINGVECTOR_H_ #define STRINGVECTOR_H_ #include <vector> #include <string> typedef std::vector< std::string > StringVector; #endif