我有一堆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