假设我有std::vector
std::string
s。
// 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
}
...我是否必须在typedef
的标头文件中再次使用Bar
?
// Bar.h
typedef std::string< std::vector > StringVector;
class Bar {
Bar( StringVector pListOfFiles );
}
是否可以将typedef std::vector< std::string > StringVector
放在一个文件中,并让其他所有类都知道StringVector
类型?
答案 0 :(得分:15)
#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
答案 1 :(得分:0)
当然不是,你不必在所有头文件中输入typedef,只需在其余源文件包含的任何头文件中执行。
答案 2 :(得分:0)
改为创建一个类。
class Files {
};
然后你可以在任何需要的地方使用前瞻声明;
class Files;
您将封装适合文件的行为。