微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

库和项目包括具有不同实现的相同标头

如何解决库和项目包括具有不同实现的相同标头

假设我们有一些静态库 Library,它有一些函数 void x() { foo(); }(比方说,在 library.h 中声明并在 library.cpp 中定义)

定义 void foo(); 在某个头文件 functionality.h 中。

此外,当我们构建 Library.lib 时,我们定义了 _BUILDING_LIBRARY(使用 -DBUILDING_LIBRARY 或通过任何方式)。

然后假设 functionality.cpp 看起来像这样:

#ifdef _BUILDING_LIBRARY
void foo() { do_x(); }
#else
void foo() { do_y(); }
#endif

问题如下:

我如何获得包含 Library调用 x() 的项目,但也构建文件 functionality.cpp(没有 _BUILDING_LIBRARY)以选择所需的 foo() 实现?

#include <library.h>
#include <functionality.h>

int main()
{
    x();
    foo();
}

应该执行

do_x();
do_y();

但是,一个最小的工作示例显示两个调用都执行 do_y


有人建议 this question 可能会给我一个答案,但这意味着 Library 也会为我提供 foo()(我不需要也不想要,我只是需要来自 x()Library)。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。