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

C++ C++;定义类(模式?),c++,design-patterns,c-preprocessor,C++,Design Patterns,C Preprocessor,我在.c中有一个开源库,它有两个参数,但它们在.h文件中用#define硬编码。它们围绕着所有代码。 更改参数->重新编译。 我如何才能最好地设计我的cpp包装器,使其能够传递一些参数值,并且能够在不重新编译代码的情况下调用代码 您可以使它们成为类的静态成员,并在实现文件中初始化它们 //header.h class Hardcoded { public: static int param; }; //implementation.cpp #include "header.h" int

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

您可以使它们成为类的静态成员,并在实现文件中初始化它们

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

//implementation.cpp
#include "header.h"
int Hardcoded::param = 0;
或者,您可以使用
extern
声明一个自由变量,并在实现文件中对其进行初始化

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

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

如果不想更改整个代码,可以继续使用宏,而无需每次更改值时都进行编译:

#define PARAM Hardcoded::param
编辑:

我现在明白你的意思了:

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

在这种情况下,不可能做你想做的事情,而且你无论如何也不应该这样做,因为每次定义更改时,你都需要编译不同的东西。因此,这不是重新编译的问题,而是需要重新编译的问题,您可以使它们成为类的静态成员,并在实现文件中初始化它们

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

//implementation.cpp
#include "header.h"
int Hardcoded::param = 0;
或者,您可以使用
extern
声明一个自由变量,并在实现文件中对其进行初始化

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

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

如果不想更改整个代码,可以继续使用宏,而无需每次更改值时都进行编译:

#define PARAM Hardcoded::param
编辑:

我现在明白你的意思了:

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

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

感谢您提供了良好的解决方案!但是我不能应用这个,硬编码的代码太硬了,我认为通过性能优化,它有很多带有#if var….的代码#elif…#endif,不是吗?我们不能只将param定义为static var。我更喜欢用.c lib代码的最小更改来贡献包装器。@SeregASM给我们展示一些代码,然后。。。这个方法可能失败的例子。Luchian,让我展示一下我是如何解决这个问题的。我只是将defines更改为所有可能的值,ans将其存储到单独的.c和.h文件中,并在c文件中重命名全局函数以将其正确链接到一个结果文件。接下来,我用一个抽象类的后续类创建了cpp wrapper to.c文件。最后,我有一个带有参数的工厂,它通过提供参数来创建我需要的类。感谢您提供了好的解决方案!但是我不能应用这个,硬编码的代码太硬了,我认为通过性能优化,它有很多带有#if var….的代码#elif…#endif,不是吗?我们不能只将param定义为static var。我更喜欢用.c lib代码的最小更改来贡献包装器。@SeregASM给我们展示一些代码,然后。。。这个方法可能失败的例子。Luchian,让我展示一下我是如何解决这个问题的。我只是将defines更改为所有可能的值,ans将其存储到单独的.c和.h文件中,并在c文件中重命名全局函数以将其正确链接到一个结果文件。接下来,我用一个抽象类的后续类创建了cpp wrapper to.c文件。最后,我有一个带有参数的工厂,它通过提供参数来创建我需要的类。