我有一堆C++测试文件的项目。每个测试文件声明这样的类:如何隔离两个具有相同名称的C++类?
// test1.cpp
...
class Foo { void bar() {...} };
...
和
// test2.cpp
...
class Foo { void bar() {...} };
...
等。
一切都很好,直到测试套件变得相当大,并且Foo
类的内容在某些测试模块中变得不同。当涉及到联系时,事情就会出错。每个ELF文件中类的方法被声明为公共弱(符号为nm
表示法中的“W”)符号,并且它导致调用该方法的错误实例,例如, tests1.cpp
致电Foo::bar()
从tests2.cpp
。
如何从另一个隔离class Foo
的一个实例?
声明与__attributes__ ((visibility ("hidden")))
类没有帮助,符号保持公开。
也肯定我可以使用这个命名空间,但我宁愿避免这个选项。
任何想法?
你为什么要避免名称空间?这就是他们被发明的原因! – Steve
您可以使用匿名命名空间,将'Foo'声明包装在'namespace {class Foo {...}; }'应该工作得一样,并使编译单元内部的'Foo'成为内部函数。 – rodrigo
@Steve我想修改一次(例如,在makefile中),而不是每次为名称空间创建一个新名称。 – krokoziabla