我有一个包含一堆 C++ 测试文件的项目。每个测试文件声明一个这样的类:
// test1.cpp
...
class Foo { void bar() {...} };
...
和
// test2.cpp
...
class Foo { void bar() {...} };
...
等等。
一切都很好,直到测试套件变得相当大并且 Foo
类的内容在某些测试模块中变得不同。当涉及到链接时,事情就出错了。每个 ELF 文件中类的方法都声明为公共(public)弱(nm
表示法中的“W”)符号,这会导致调用错误的方法实例,例如tests1.cpp
从 tests2.cpp
调用 Foo::bar()
。
如何将 class Foo
的一个实例与另一个实例隔离开来?
用 __attributes__ ((visibility ("hidden")))
声明类没有帮助,符号保持公开。
当然我可以为此使用命名空间,但我宁愿避免使用此选项。
有什么想法吗?
最佳答案
就您不想给它们赋予任意名称而言,您对 namespace 的怀疑是没有根据的。
这对于匿名命名空间来说是一项完美的工作。写
namespace /*no name here makes it anonymous*/{
class Foo { void bar() {...} };
}
等等。这样做会将 Foo
内化到那个特定的翻译单元。
关于c++ - 如何隔离两个同名的C++类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46727724/