C ++定义为类(模式?)

时间:2012-01-18 19:40:13

标签: c++ design-patterns c-preprocessor

我在.c中有一个开源库,它有2个参数,但它们是用#define在.h文件中硬编码的。它们围绕着所有代码。 更改参数 - >重新编译。 我怎样才能最好地设计我的cpp包装器,我可以传递一些参数值,并且能够在不重新编译的情况下调用代码?

1 个答案:

答案 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

在这种情况下,不可能做你想做的事情,你也不应该这样做,因为你需要在每次定义更改时编译不同的东西。所以这不是重新编译的问题,而是你需要重新编译