Переменная в include

 

Всем привет!


Есть потребность подключать файлы выборочно, согласно конфигурации.

Как это реализовать, если #include  не поддерживает вариант работы с переменными? Файлов много - будет много одинакового кода (условия), но с разной переменной внутри, поэтому решил упростить - через функцию подключать. If (...)   incl(name)


 Print ("4_1\\NZDUSD\\"+(string) name+".mqh"); //имя верное
 
 #include "4_1\\NZDUSD\\"+ (string) name +".mqh";  //не работает вообще никак с переменными - пробовал разные варианты конкатенации
 
Artem Mordvinkin:

Всем привет!


Есть потребность подключать файлы выборочно, согласно конфигурации.

Как это реализовать, если #include  не поддерживает вариант работы с переменными? Файлов много - будет много одинакового кода (условия), но с разной переменной внутри, поэтому решил упростить - через функцию подключать. If (...)   incl(name)


Никак.
Директива #include подключает текст из файла на этапе компиляции, а все манипуляции с переменными происходят в скомпилированной программе во время выполнения.
 

Не формировать имена, а просто подключать нужные файлы:

#ifdef a 
   #include <file_11.mqh>;  
#else 
   #include <file_22.mqh>;
#endif 
 
Sergey Gridnev #:
Никак.
Директива #include подключает текст из файла на этапе компиляции, а все манипуляции с переменными происходят в скомпилированной программе во время выполнения.

Ага. Спасибо. Думал, может есть вариант.

 
Dmitry Fedoseev #:

Не формировать имена, а просто подключать нужные файлы:

Да, я рассматривал такой вариант и только он и остается. Это нужно для оптимизации - выбор оптимизируемого сегмента через if. В общем будет много однотипного кода (if a==1 && .... ) #include <1.mqh> и тп - меняться будет только значение переменной a

 
Artem Mordvinkin:

Всем привет!


Есть потребность подключать файлы выборочно, согласно конфигурации.

Как это реализовать, если #include  не поддерживает вариант работы с переменными? Файлов много - будет много одинакового кода (условия), но с разной переменной внутри, поэтому решил упростить - через функцию подключать. If (...)   incl(name)


Раз возникла подобная необходимость - скорее всего, у вас серьезная ошибка в архитектуре. Какая задача стоит? Вы можете в зависимости от параметров использовать разные классы или вообще использовать фабрику объектов.

 
Dmitry Fedoseev #:

Не формировать имена, а просто подключать нужные файлы:

Это же будет так же будет выполняться на стадии компиляции и не может быть изменено на основе условий в момент выполнения...