我有一个包含大量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")))没有帮助,符号仍然是公开的.
同样可以肯定的是我可以使用命名空间,但我更愿意避免使用此选项.
有任何想法吗?
如果您不想将任意名称归属于名称空间,那么您对名称空间的怀疑是没有根据的.
这是匿名命名空间的完美工作.写
namespace /*no name here makes it anonymous*/{
class Foo { void bar() {...} };
}
Run Code Online (Sandbox Code Playgroud)
等等.Foo对特定的翻译单元进行内部化.
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |