How To Include?
От: Bear Hunter Украина  
Дата: 05.11.07 15:34
Оценка:
Здравствуйте!

Поделитесь опытом, кто как делает?

Допустим есть некий клас, описанный в файле 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 припустим нужно включить с десяток файлов.

Вопрос:
Где бы Вы включили эти файлы?

Спасибо!
Re: How To Include?
От: MortizW  
Дата: 06.11.07 07:57
Оценка:
Здравствуйте, 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
Re[2]: How To Include?
От: Bear Hunter Украина  
Дата: 06.11.07 09:10
Оценка:
Здравствуйте, 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, но самому проследить что еще нужно включить...

Есть ли другие варианты, так сказать более идеальные?

Спасибо!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.