次のコードを検討してください。
struct foo {
typedef int bar;
};
namespace foo {
class baz {
/* code */
};
}
これは私が取り組まなければならないコードベースに広がっており、時々うまくいくのですが、その方法がわかりません。
名前空間とクラスが同じソースで発生しない限り (前処理後)、機能します (その部分は理解しています)。ただし、突然名前空間とクラスの両方がプリプロセッサによって同じコンパイル単位にドラッグされると、衝突する (可能性がある) (ソースでこれが発生するかどうかはわかりません)。
コンパイラが常にコード構造を正しく解決できるようにする規則はありますか? 最も論理的なのは、名前空間とクラスが同じシンボルを持つことを禁止することです。適用されたコーディング スタイルでは、あいまいさはありますが、名前空間とクラスの衝突が許容されるため、コーディング規則を変更する代わりに、使用法をコンパイラに伝える方法をお勧めします。
何かのようなもの:
use_namespace(foo)::baz b;
use_class(foo) b;