С точки зрения зависимости, присвоение имен всем типам в одном заголовке, вероятно, будет кошмаром обслуживания. Это понятно для typedef
, потому что вы хотите уникальное определение, но нет никаких оснований для дальнейшего объявления class
здесь.
// types.h
namespace myproject
{
typedef int TInt;
} // namespace myproject
Нет смысла вперёд объявлять символ Class
: вы загрязняете свое собственное пространство имен. Пусть каждый файл самостоятельно решит, нужен ли ему символ или нет, и затем объявим его самостоятельно.
Заявить ClassList
тоже нехорошо: оно должно быть доступно только тем, кто в этом нуждается. Вы можете создать специальный заголовок для прямого объявления Class
связанных вещей:
// class_fwd.h
namespace myproject
{
class Class;
typedef std::list<Class> ClassList;
} // namespace myproject
// class.h
#include "myproject/class_fwd.h"
namespace myproject
{
class Class {};
} // namespace myproject