英語のページでも構いません。
宜しくお願い致します。
どういう回答を期待しているのかいまいちわかりませんが…、以下のようなものですか?
■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 クラスで処理すればよいのですね。
ありがとうございました!
・・・で、これは実際にクロスプラットフォーム開発においては標準的な方法なのでしょうか?
質問の書き方が悪かったみたいですね。 すみません。
パターンの使用は結構なのですが、では実際パターンを用いてクロスプラットフォーム開発する方法をご教授願えますでしょうか?
Linux用にコンパイルした際には、このpreprocessorが働いてこちらのソースが使用されるようにするというような具体的な記述方法等です。
ありがとうございました。