C ++ определить для классов (шаблон?) - PullRequest
1 голос
/ 18 января 2012

У меня есть библиотека с открытым исходным кодом в .c, она имеет 2 параметра, но они жестко запрограммированы в файле .h с помощью #define. Они вокруг всего кода. Измените параметр-> перекомпилировать. Как я могу сделать лучший дизайн моей обертки cpp к этому, которому я могу передать некоторые значения параметров и иметь возможность вызывать код без его перекомпиляции?

1 Ответ

4 голосов
/ 18 января 2012

Вы можете сделать их static членами класса и инициализировать их в файле реализации.

//header.h
class Hardcoded
{
public:
   static int param;
};

//implementation.cpp
#include "header.h"
int Hardcoded::param = 0;

или вы можете объявить свободную переменную с extern, которую вы инициализируете в файле реализации.

РЕДАКТИРОВАТЬ:

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

#define PARAM Hardcoded::param

РЕДАКТИРОВАТЬ:

Теперь я понимаю, что вы имеете в виду:

#if QLZ_COMPRESSION_LEVEL == 1
        state->hash[i].offset = 0;
#else
        state->hash_counter[i] = 0;
#endif

В этом случае невозможно делать то, что вы хотите, и вы не должны делать это в любом случае, потому что вы нужно для компиляции разных вещей при каждом изменении определения.Так что дело не в перекомпиляции, а в том, что вам нужно перекомпилировать .

...