Здравствуйте!
Поделитесь опытом, кто как делает?
Допустим есть некий клас, описанный в файле SomeClass.h:
#pragma once
class CSomeClass
{
public:
CSomeClass();
~CSomeClass();
SOME_TYPE SomeMethod( SOME_TYPE_1 Value );
...
}
В файле(припустим SomeClass.cpp), где CSomeClass имплементируется, ранее описанный SomeClass.h включается.
Для того, чтоб работать с SOME_TYPE и SOME_TYPE_1 припустим нужно включить с десяток файлов.
Вопрос:
Где бы Вы включили эти файлы?
Спасибо!
Здравствуйте, Bear Hunter, Вы писали:
BH>Здравствуйте!
BH>Поделитесь опытом, кто как делает?
BH>Допустим есть некий клас, описанный в файле SomeClass.h:
BH>BH>#pragma once
BH>class CSomeClass
BH>{
BH>public:
BH> CSomeClass();
BH> ~CSomeClass();
BH> SOME_TYPE SomeMethod( SOME_TYPE_1 Value );
BH> ...
BH>}
BH>
BH>В файле(припустим SomeClass.cpp), где CSomeClass имплементируется, ранее описанный SomeClass.h включается.
BH>Для того, чтоб работать с SOME_TYPE и SOME_TYPE_1 припустим нужно включить с десяток файлов.
BH>Вопрос:
BH>Где бы Вы включили эти файлы?
BH>Спасибо!
Все зависит от конкретной структуры приложения.
Если приложение разбито на слои, то клиентский код может воспользоваться включение некой стандартной директивы для этого слоя. StdIncLeveXXX.h
Предположим, что в твоем есть уровень предоставляющий интерфесы для преобразования для использования базы данных. Пусть он называется Sql Cli
SOME_TYPE и SOME_TYPE_1 объявлены где-то в недрах этого уровня. Клиентский код особо не знает где.
BH>#pragma once
#include "StdIncSqlCli.h"
class CSomeClass
{
public:
CSomeClass();
~CSomeClass();
SOME_TYPE SomeMethod( SOME_TYPE_1 Value );
Конечно у такого решения есть недостаток, т.к. #include "StdIncSqlCli.h" может включаться с собой еще десяток других заголовочных файлов, совершенно не нужных клиентскому коду, но опять же, можно можно подключится только к какому-то независимому контексту слоя например #include "StdIncSqlCliTypes.h"
Либо перед включение специализировать контекст, указав, что вы хотите включить только определенную часть. Как по мне немного уродливо.
#define OnlySqlCli
#include "StdIncSqlCli.h"
#undef OnlySqlCli
Здравствуйте, MortizW, Вы писали:
[...]
MW>Конечно у такого решения есть недостаток, т.к. #include "StdIncSqlCli.h" может включаться с собой еще десяток других заголовочных файлов, совершенно не нужных клиентскому коду, но опять же, можно можно подключится только к какому-то независимому контексту слоя например #include "StdIncSqlCliTypes.h"
[...]
Вот это мне более всего не нравиться..Я поэтому и спрашиваю, как поступают в таких ситуациях другие?
Можно конечно и так:
//Файл SomeClass.cpp и еще куча файлов где нужен класс CSomeClass
#include "StdIncSqlCli.h"
#include "SomeClass.h"
Но мне это вариант что-то не очень..
Еще как вариант, можно создать файл, ну например SomeClassInc.h
//Файл SomeClassInc.h
#pragma once
#include "StdIncSqlCli.h"
[Включить все необходимые файлы]
#include "SomeClass.h"
И тут уже пользователь сможет сам себе выбирать: включать ли SomeClassInc.h в свой .cpp или же SomeClass.h, но самому проследить что еще нужно включить...
Есть ли другие варианты, так сказать более идеальные?
Спасибо!