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

C++言語を用いてクロスプラットフォーム ( Linux, Win) のアプリ(単なるCUIアプリです)開発の勉強をしようとしているのですが、プリプロセッサをなるべく使わず尚且つソースをなるべく共有する方法、またはそれらの学習に役立つサイトを教えてください。 namespaceのうまい使い方や、preprocessorを使う必要はあるが、こうすると上手くnamespaceの特性を生かせる等。(preprocessor, namespaceの基本的な使い方は知っています。)
英語のページでも構いません。

宜しくお願い致します。


●質問者: pooh2005
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:C++ Cui Linux WIN うまい
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● しおり
●27ポイント

デザインパターンの内、

辺りを使うのが良いのではないでしょうか。

デザインパターンとともに学ぶオブジェクト指向のこころ (Software patterns series)オブジェクト指向における再利用のためのデザインパターン

◎質問者からの返答

質問の書き方が悪かったみたいですね。 すみません。

パターンの使用は結構なのですが、では実際パターンを用いてクロスプラットフォーム開発する方法をご教授願えますでしょうか?

Linux用にコンパイルした際には、このpreprocessorが働いてこちらのソースが使用されるようにするというような具体的な記述方法等です。

ありがとうございました。


2 ● しおり
●27ポイント

どういう回答を期待しているのかいまいちわかりませんが…、以下のようなものですか?


■Template Method パターンが使える例

◇非オブジェクト指向

void method()
{
#if defined(PLT_UNIX)
 // method for step1
#elif defined(PLT_WINDOWS)
 // method for step1
#else
 #error unknown platform
#endif
 // method for step2
#if defined(PLT_UNIX)
 // method for step3
#elif defined(PLT_WINDOWS)
 // method for step3
#else
 #error unknown platform
#endif
 // method for step4
#if defined(PLT_UNIX)
 // method for step5
#elif defined(PLT_WINDOWS)
 // method for step5
#else
 #error unknown platform
#endif
 // method for step6
}


int main()
{
 method();
}

◇オブジェクト指向

class my_base
{
 public:
 virtual ~my_base() throw() {
 }

 void method() {
 method_for_step1();
 // method for step2
 method_for_step3();
 // method for step4
 method_for_step5();
 // method for step6
 }

 protected:
 virtual void method_for_step1() = 0;
 virtual void method_for_step3() = 0;
 virtual void method_for_step5() = 0;
};

class my_unix: public my_base
{
 protected:
 virtual void method_for_step1() {
 // method for step1
 }
 virtual void method_for_step3() {
 // method for step3
 }
 virtual void method_for_step5() {
 // method for step5
 }
};

class my_windows: public my_base
{
 protected:
 virtual void method_for_step1() {
 // method for step1
 }
 virtual void method_for_step3() {
 // method for step3
 }
 virtual void method_for_step5() {
 // method for step5
 }
};

my_base *create_my_object()
{
#if defined(PLT_UNIX)
 return new my_unix();
#elif defined(PLT_WINDOWS)
 return new my_windows();
#else
 #error unknown platform
#endif
}


int main()
{
 my_base *obj = create_my_object();
 obj->method();
 delete obj;
}
◎質問者からの返答

◇オブジェクト指向

後は、プラットフォーム間で共通の動作の場合は my_base クラスで処理すればよいのですね。

ありがとうございました!

・・・で、これは実際にクロスプラットフォーム開発においては標準的な方法なのでしょうか?


3 ● KUROX
●26ポイント

http://0xcc.net/pub/uu-2004-08/

共通で使えるライブラリを使うのがお手軽ですが・・。

関連質問


●質問をもっと探す●



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