gpt4 book ai didi

c++ - C++ 库命名空间和 C linux 函数之间的名称冲突

转载 作者:IT王子 更新时间:2023-10-29 00:13:28 24 4
gpt4 key购买 nike

Linux <ncurses.h> header 定义函数 meta 和 C++ 元编程库 meta 将其所有代码放入全局命名空间 meta .

我如何在同一个 C++ 程序中同时使用这两者(不一定是相同的 TU,但那会很好)?有没有办法解决名称冲突?

我可以想到两个脆弱的解决方法,但它们很容易被破坏:

  • 解决方法 A:

     namespace linux {
    #include <ncurses.h>
    } // namespace linux
    using linux::max_align_t; // ncurses assumes it is in the global namespace
    #include <meta/meta.hpp>

    编译但可能无法链接,因为 ncurses全局命名空间中需要符号。

  • 解决方法 B:

    #include <ncurses.h>
    namespace cpp {
    #include <meta/meta.hpp>
    } // namespace cpp

    非常脆弱,因为它只能在 meta 期间工作库不假定它的任何符号都在全局命名空间中。也就是说,如果库需要在内部消除符号歧义并使用 ::meta::symbol_name为此,这种方法将失效。

最佳答案

我建议解决方法 C:隔离您的代码,使 meta 库使用和 ncurses 使用在项目中的单独翻译单元中。这样在任何特定的翻译单元中都没有一个符号被用作命名空间和全局函数。

关于c++ - C++ 库命名空间和 C linux 函数之间的名称冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37393414/

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