Linux<ncurses.h>
头文件定义函数meta
,C++ 元编程库meta
将其所有代码放在全局命名空间meta
中。
我如何在同一个 C++ 程序中同时使用两者(不一定是同一个 TU,但这会很好)?有没有办法解决名称冲突?
我可以想到两个脆弱的解决方法,但它们很容易被打破:
解决方法一:
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
用于该符号,则这种方法将失效。