gpt4 book ai didi

c++ - 在.lib 中使用#ifdef 并在linkin 项目中定义变量

转载 作者:行者123 更新时间:2023-11-30 04:22:33 26 4
gpt4 key购买 nike

我正在使用 Visual Studio 2008 在 C++ 中创建一个库 (.lib)。我想设置一个变量来根据变量更改库的行为。简化很多,像这样:

#ifdef OPTION1
i = 1;
#else
i = 0;
#endif

但是变量(在本例中为 OPTION1)不应在库本身中定义,而应在链接到库的代码中定义,这样只需更改变量的定义我就可以从程序中获得不同的行为,但是始终链接到同一个库。

这可能吗?如何实现?还是有更优雅的方式来实现我想要的?

最佳答案

要做到这一点,依赖宏的代码必须编译为链接到库的代码的一部分,而不是库本身的一部分。你能做的最好的事情是这样的:

在您的公共(public) .h 文件中:

namespace LibraryPrivate {

void functionForOptionSet();
void functionForOptionUnset();

}

#ifdef OPTION1
inline void dependentBehaviour() {
LibraryPrivate::functionForOptionSet();
}
#else
inline void dependentBehaviour() {
LibraryPrivate::functionForOptionUnset();
}
#endif

在您库的 .cpp 文件中:

namespace LibraryPrivate {

void functionForOptionSet()
{ i = 1; }

void functionForOptionUnset()
{ i = 0; }

}

也就是说,你必须在库中实现这两个选项,但你可以(部分地)限制基于宏的接口(interface)。有点像 WinAPI 对 charwchar_t 函数所做的事情:如果同时提供 SomeFunctionA(char*)SomeFunctionW(wchar_t *) 然后是宏 SomeFunction 扩展为其中之一。

关于c++ - 在.lib 中使用#ifdef 并在linkin 项目中定义变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13766029/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com