изменение значений const во время разработки без перекомпиляции всего - PullRequest
3 голосов
/ 01 марта 2011

Прямо сейчас у меня есть значительное количество потенциальных магических чисел, хранящихся в константах. Они часто настраиваются между каждой сборкой. например, const int numAPPLES = 25

прямо сейчас они определены в верхней части каждого связанного заголовка класса. Но иногда им нужно делиться, и мне и до того нужно:

  1. Скопируйте определение; и риск противоречивых значений
  2. включает дополнительный заголовок (что я и сделал)

Раньше у меня все они были в options.h, и это здорово, потому что я могу видеть их все вместе, но изменение числа, очевидно, приведет к полной перестройке.

Если это имеет значение, я использую VS 2010.

Как лучше всего изменить эти числа? Мне интересно, как я могу добавить файл .txt в мой проект VS, а затем извлечь из него переменные.

типы данных (на данный момент) только char и int

Я также не хочу иметь целую библиотечную зависимость только для доступа к ним. Но простой рекомендуемый класс; или способ построить собственный был бы великолепен.

спасибо!


редактирование: это хорошо для вас, ребята ?: http://www.codeproject.com/KB/cpp/IniReader.aspx

Ответы [ 3 ]

9 голосов
/ 01 марта 2011

Если вам нужны константы во время компиляции, вам действительно нужно перекомпилировать их при изменении.

Если вам нужны только значения во время выполнения, вы можете объявить их как

extern const int numAPPLES;

и поместите фактические значения в отдельный файл .cpp.Когда вы меняете значение, вам просто нужно перекомпилировать этот файл.

2 голосов
/ 01 марта 2011

Рассматривали ли вы использовать файл .ini, который читается во время выполнения, для хранения всех этих констант?Затем вы можете прочитать такие файлы, используя GetPrivateProfileInt / GetPrivateProfileString.Как показывает мой опыт, это довольно распространенный способ справиться с вашей ситуацией в Windows.

Вот пример, приведенный в простом файле Try.ini:

..
[Section1]
Const1 = 1
..

И фрагмент кода:

CString FileName = _T("Try.ini");
int Value = GetPrivateProfileInt( "Section1", "Const1", DEFAULT_ERROR, FileName );
if( Value == DEFAULT_ERROR)
  return ERROR;

Приветствия

1 голос
/ 01 марта 2011

Ответ для редактирования: Нет, это выглядит не очень хорошо.Что это за магические 255, разбросанные по всему коду?Это код C ++, так что же там делают строки char *

Полагаю, это может быть полезно, если он будет скомпилирован как есть, и вы сможете сразу интегрировать его в свой код.Затем, когда вам это удобно, вы можете сохранить интерфейс и переписать методы для ясности и безопасности.

Но я предлагаю вам взглянуть на некоторые библиотеки, и первую, которая выходит из головы моегозаголовок Boost.Program_options .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...