- Main Page
- Namespaces
- Classes
- Related Pages

# コンベンション

## struct と class

BuddhaLib は XNA Framework と同様の操作感を開発者に与えることを目的に開発されているため、 構造体とクラスの使い分けも C# の言語使用に沿ったものとなっています。ご存知のとおり、C++ はクラスと構造体には標準アクセスレベル以外の違いはありません。

しかし、 BuddhaLib では、基本的に new オペレータを使用せずに値を確保し、参照やコピー渡し が可能なものを struct、それ以外のものを class で定義を行っています。

struct は原則的にパブリックメンバ変数が解放されており、直接値の読み書きが可能です。逆に、 class は原則的にメンバ変数へのアクセスはできません。

## STLコンテナの利用とAPI命名規則

STL コンテナを使用する場合は必ず typedef する。 型が同じであっても役割に応じて各クラス内で typedef する。 typedef の命名規則は以下に準ずる。

### vector および list

{格納するクラス名} + {List}

      typedef std::vector<Model> ModelList;
      ModelList mModelList;

### map

{格納するクラス名} + {Map}

      typedef std::vector<String, Model> ModelMap;
      ModelMap mModelMap;

## クラスメンバのコンテナへのアクセス

friend クラス以外のクラスが、あるクラスのメンバであるSTLコンテナに直接アクセスしてはならない。 必ずアクセスメンバ関数を通じて値のやり取りを行うこと。

もし、イテレーターを渡す必要がある場合は、ヘッダで宣言されているイテレーターのラッパーを使用して、 STL コンテナのイテレーターを直接使用しなくて済むようにする。

### API命名体系

- list, vector コンテナの要素収録数を取得するメンバ関数は GetNum + {クラス名（複数系）}
- 添え字を与えてコンテナの中身を取得するメンバ関数は Get + {クラス名（単数系）}
- 添え字およびサイズは unsigned int。ストップコードか、エラーを扱う必要があるケースはほとん どないと思われるので signed int ではなく、 UINT_MAX を使用する。