列挙型と名前空間について上手くいかなかったことがあって、いろいろ調べても目的としたものが出てこなかったのでここで質問させていただきます。
C++ですのでこの掲示板での質問が禁止でしたら指摘してくだされば、削除します。
言語はC++で、DirectXの自作ライブラリを行っているところです。
まず、ある名前空間(MyDirectXLib)があったとして、ここでDirectXの機能を実装しています。
そしてそのMyDirectXLibの中で、キーボードのキーを表す列挙型(KeyBoardKey)があったとします。
このKeyBoardKeyを、MyDirectXLibで実装したものを使いやすくした関数が集まっている公開用の名前空間(MyDirectXLibPublic)で、使えるようにするのにはどのようにしたらよいでしょうか?
つまり、KeyBoardKeyをMyDirectXLibで定義して、MyDirectXLibPublicで使いたいのです。
当然ながらtypedefはだめでした。
こうなると両方の名前空間に同じ列挙型を指定しなくてはならないのでしょうか?
一応下に単純なソースを載せておきます。
なお、このような面倒な方法をするのは、MyDirectXLibを公開したくないからです。
使用する人がMyDirectXLibPublicのみ使うようにしたいからです。
//------------------------ // KeyBoard.h //------------------------ #ifndef INCLUDED_KEYBOARD_H #define INCLUDED_KEYBOARD_H //DirectXの機能を実装する名前空間 namespace MyDirectXLib { //キーボードのキーを表す列挙型 enum KeyBoardKey { KEYBOARD_KEY_ESC = 0x01; KEYBOARD_KEY_1 = 0x02; ... ... KEYBOARD_KEY_MEDIASELECT = 0xED; } } #endif //------------------------ // Public.h //------------------------ #ifndef INCLUDED_PUBLIC_H #define INCLUDED_PUBLIC_H //MyDirectXLibで実装した機能を簡単にした公開用関数をまとめた名前空間 namespace MyDirectXLibPublic { //この名前空間内でKeyBoard.hで定義した列挙型KeyBoardKeyを使いたい // 以下エラーだったもの // typedef MyDirectXLib::KeyBoardKey KeyBoardKey ←これだけだと列挙子が必要だという // typedef MyDirectXLib::KEYBOARD_KEY_ESC KEYBOARD_KEY_ESC ←このようなことを全ての列挙子について行うと再定義だといわれる。 } #endifよろしくお願いします。