9

std::vector私がsを持っているとしましょうstd::string

// 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を1つのファイルに入れて、他のすべてのクラスにタイプを認識させることは可能StringVectorですか?

4

3 に答える 3

20

#include "Foo.h"取得するすべてのファイルtypedef。したがって、すべてのファイルに複製する必要はありません含まれている限り。必要に応じて専用ファイルにFoo.h配置できtypedefます。あなたの場合、これは理にかなっており、改善されるでしょう。と必要なインクルードを持っているBar.hという事実に依存するべきではありません。Foo.htypedef

ただし、タイプを使用するすべてのファイルに含めるために、シンプルに保ち、1つのタイプに制限します。

// StringVector.h
#ifndef STRINGVECTOR_H_
#define STRINGVECTOR_H_

#include <vector>
#include <string>

typedef std::vector< std::string > StringVector;

#endif
于 2013-01-18T07:57:56.260 に答える
0

もちろん、すべてのヘッダーファイルでtypedefを実行する必要はありません。残りのソースファイルに含まれているヘッダーファイルで、typedefを実行するだけです。

于 2013-01-18T07:58:04.420 に答える
0

代わりにクラスを作成してください。

class Files {
};

次に、必要に応じて前方宣言を使用できます。

class Files;

ファイルに適した動作をカプセル化します。

于 2013-01-18T09:06:52.747 に答える