如何隔离两个同名的c ++类?

kro*_*bla 1 c++ g++ elf

我有一个包含大量C++测试文件的项目.每个测试文件都声明一个这样的类:

// test1.cpp
...
class Foo { void bar() {...} };
...
Run Code Online (Sandbox Code Playgroud)

// test2.cpp
...
class Foo { void bar() {...} };
...
Run Code Online (Sandbox Code Playgroud)

等等.

在测试套件变得非常大并且Foo某些测试模块中的类内容变得不同之前,一切都很好.在联系方面出现问题.每个ELF文件中的类的方法被声明为公共弱(nm符号中的"W" )符号,并且它导致调用方法的错误实例,例如来自的tests1.cpp调用.Foo::bar()tests2.cpp

如何将一个实例class Foo与另一个实例隔离开来?

宣布课程__attributes__ ((visibility ("hidden")))没有帮助,符号仍然是公开的.

同样可以肯定的是我可以使用命名空间,但我更愿意避免使用此选项.

有任何想法吗?

Bat*_*eba 7

如果您不想将任意名称归属于名称空间,那么您对名称空间的怀疑是没有根据的.

这是匿名命名空间的完美工作.写

namespace /*no name here makes it anonymous*/{
    class Foo { void bar() {...} };
}
Run Code Online (Sandbox Code Playgroud)

等等.Foo对特定的翻译单元进行内部化.