我在.c中有一个开源库,它有2个参数,但它们是用#define在.h文件中硬编码的。它们围绕着所有代码。 更改参数 - >重新编译。 我怎样才能最好地设计我的cpp包装器,我可以传递一些参数值,并且能够在不重新编译的情况下调用代码?
答案 0 :(得分:4)
您可以让他们成为类的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
在这种情况下,不可能做你想做的事情,你也不应该这样做,因为你需要在每次定义更改时编译不同的东西。所以这不是重新编译的问题,而是你需要重新编译。