Должен ли я вводить typedef в каждый файл заголовка?

Допустим у меня есть std::vector of 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;
}

если у меня есть другой класс, который принимает

3 ответов


все файлы #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

конечно, нет, вам не нужно typedef во всех файлах заголовков, просто сделайте это в любом файле заголовка, который включен в остальные исходные файлы.


вместо этого создайте класс.

class Files {
};

тогда вы можете использовать прямое объявление везде, где это необходимо;

class Files;

вы инкапсулируете поведение, соответствующее файлам.