私はC++テストファイルの束を持ったプロジェクトを持っています。その上同じ名前の2つのC++クラスを分離する方法は?
// test1.cpp
...
class Foo { void bar() {...} };
...
と
// test2.cpp
...
class Foo { void bar() {...} };
...
と:各テストファイルは、このようなクラスを宣言します。
テストスイートがかなり大きくなり、一部のテストモジュールでFoo
クラスの内容が異なるようになるまではすべて問題ありませんでした。リンケージに関しては、状況が間違っています。各ELFファイルのクラスのメソッドはpublic weak(nm
表記では "W")として宣言され、メソッドの間違ったインスタンスを呼び出す結果になります。 tests1.cpp
Foo::bar()
をtests2.cpp
から呼び出します。
class Foo
のインスタンスを別のインスタンスから隔離するにはどうすればよいですか。
__attributes__ ((visibility ("hidden")))
でクラスを宣言しても、記号は公開されたままです。
また、このために名前空間を使用することもできますが、このオプションは避けたいと考えています。
アイデア?
なぜ名前空間を避けたいですか?彼らが発明された理由はかなりです! – Steve
あなたは 'namespace {class Foo {...};}で' Foo'宣言をラップして匿名の名前空間を使うことができます。 } 'は同じように動作し、' Foo'をコンパイル単位の内部にします。 – rodrigo
@ Steve私は名前空間の新しい名前をつくるのではなく、一度(例えばメイクファイルで)修正したいと思います。 – krokoziabla