我是否必须在每个头文件上输入typedef?

时间:2013-01-18 07:56:16

标签: c++ oop typedef

假设我有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类型?

3 个答案:

答案 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;

您将封装适合文件的行为。