Использование макроса для определения файла включенияC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Использование макроса для определения файла включения

Сообщение Anonymous »

Чтобы сделать длинную историю, я работаю над некоторым кодом, который нуждается в разных файлах заголовков на основе различных параметров конфигурации. Я мог бы сделать что-то вроде этого: < /p>

Код: Выделить всё

#if OPTION == A
#include "relative/path/to/file/a.hpp"
#elseif OPTION == B
#include "relative/path/to/file/b.hpp"
#elseif OPTION = ...
...
#endif
< /code>
Это сработало бы, но это кажется действительно уродливым решением для того, что потенциально может быть больше, чем несколько файлов. Я также мог бы просто включить все различные файлы заголовков, но это также кажется немного уродливым решением, и оно может представлять проблемы в будущем, если файлы (по какой -то ужасной причине) начнут переопределять одни и те же объекты. Идея, которую я имел, заключалась в том, что что-то вроде следующего было бы неплохо, особенно в контексте того, как написана остальная часть кода: < /p>
#define QUOTE(str) #str
#define STRINGIFY(A,B) QUOTE(A##B)
...
#include STRINGIFY(relative/path/to/option/,OPTION)
Проблема с этим, кажется, двойная:
  • Опция определение не расширяется внутри строки .
    Если есть какие-либо прямые черты в названии пути, stringify не удалось, с g+ gtry lember strice strice strice ray strice ray strice strice strice strice strice strice strice strice strice strice strice strice strice strice strice strice strice strice strice li lestra lershes />
Ошибка: вставка «/» и «опция» не дает действительного токена предварительной обработки

Я не могу найти какую -либо реальную информацию о том, почему/ - это плохой персонаж для C ++, просто не говоря уже о том, что вы просто не введены в код/код>, и в кодовом/кодовом: «/код», и в кодовом/кодовом: «/код», и в кодовом/кодовом: «ИН> кодовый». Автоматическая конкатенация строки C ++ (которая не работает в операторе #include ). Я готов рассмотреть альтернативы дизайна, если я просто пытаюсь сделать что -то действительно глупое, но я также хотел бы выяснить, почему это не работает. Разумные соглашения о кодировании и типичные ожидания в отношении того, как используется код, выходят полностью из окна. Этот код, вероятно, будет изменен, по крайней мере, столько раз, сколько будет применен, часто людьми, которые потратили всю свою карьеру, написав на Fortran 77 и думают, что объектно-ориентированное программирование-это какое-то новое изобретение, которое просто усложняет ваш код.

Подробнее здесь: https://stackoverflow.com/questions/694 ... clude-file
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»