- ベストアンサー
条件の配列を使った条件分岐の簡便な方法
- 条件の配列を使って、簡潔なコードで条件分岐を行う方法を探しています。
- for文や関数ポインタを使うことで、変数や条件が増えても簡単に処理できる可能性があります。
- アドバイスをいただけると助かります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
関数ポインタの配列で実現することは可能です. static void zero(void) { std::cout <<"value="<<0 <<std::endl; } static void one(void) { std::cout <<"value="<<1 <<std::endl; } static void two(void) { std::cout <<"value="<<2 <<std::endl; } static void three(void) { std::cout <<"value="<<3 <<std::endl; } typedef void (*numbers)(void); numbers print_number[] = { zero, one, two, three }; int main(){ int value=3; print_number[value](); } これが元のコードより簡便かどうかは,人によって意見が分かれるところですが.
その他の回答 (1)
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
こんなん↓でよろしいか? #include <array> #include <functional> #include <iterator> #include <iostream> using namespace std; int main() { // "intを与えてboolを返す関数"を配列化するココロミ array<function<bool(int)>,4> conditions = { [](int value)-> bool { return value == 0; }, [](int value)-> bool { return value == 1; }, [](int value)-> bool { return value == 2; }, [](int value)-> bool { return value == 3; }, }; int value = 2; for ( int i = 0; i < conditions.size(); ++i ) { cout << boolalpha << conditions[i](value) << endl; } }
お礼
ファクトリーパターン(を使っているのですよね??)は名前だけ知っていましたが、使い方がわかりました。 ありがとうございます。
お礼
ありがとうございます。 100個くらいのかなり煩雑な条件分岐をする必要があったので、質問させていただきました。 関数ポインタをtypdefすればいいのですね。 とても参考になります。