人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

C++でとあるフォーマットで記述されたファイルからクラスを生成するモノ(ローダー?)を作ろうと思っています。
どのように設計したらよいでしょうか?

私は以下の3つの方法を考えました。
1)関数呼び出し
int XXXLoadFromFile(char* ファイル名, 欲しいクラス** ppOut);
関数内部で関数を呼ぶと引数が増えてごちゃごちゃになる。

2)クラス
コンストラクタでファイル名をセットしLoadメンバ関数で読み込み。GetXXXメンバ関数で欲しいクラスの取得。

3)生成して欲しいクラス自体がLoadメンバ関数を持つ。


色々考えましたがどうもしっくりきません。

※URLを載せる場合は何故そのURLは参考になるのか?を書いてください。


●質問者: mijuswa
●カテゴリ:コンピュータ
✍キーワード:C++ Char URL Xメン ちゃご
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● pyopyopyo
●60ポイント

こういうアプローチはいかがでしょうか?

強いて言えば、3)の方法に近いです。

class Object {
};

// ファイルから生成するクラス その1
class Object1 : public Object {
public:
 // ファイルを読んで初期化を行う。成功したら true を返す
 bool load(const char *filename);
};

// ファイルから生成するクラス その2
class Object2 : public Object {
public:
 // ファイルを読んで初期化を行う。成功したら true を返す
 bool readData(const char *filename);
};

// ローダー本体
Object* loadFromFile(const char *filename)
{
 {
 Object1 obj1 = new Object1();
 bool r = obj1->load(filename);
 if (true == r) 
 return obj1;
 
 delete obj1;
 }

 {
 Object2 obj2 = new Object2();
 bool r = obj2->readData(filename);
 if (true == r) 
 return obj2;

 delete obj2;
 }
 return NULL;
}

- Objectクラスを継承したクラスに、load() とか readData()のようなファイルを読む関数を定義します。

- load() とか readData() は読み込みに成功した場合 true を返す関数とします。

- 生成に成功した場合は Object のポインタ、失敗時は NULL を返します。

実際使うときは、 Object クラスに display() とか action() のような各機能を virtual 関数として追加し、

必要に応じて派生クラス側Object1とかObject2側でオーバライドしていきます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ