現在ポリシーについて勉強しているのですが、正直分からないことだらけです。
そこで、以下の2つの質問についてお教えください。
まず一つ目に、実装には複数の方法が存在するようですが、以下に掲示する3つの方法の中ではどれが一番良いとされているのでしょうか。
二つ目に、ポリシーの説明として
システム要件や要求に応じて、実装にオプションが考えられるとき、ポリシーに基づいたクラス設計をとることで、核となる実装に修正を加えることなく、クラスに柔軟性を持たせられます。 『C++テンプレートテクニック第2弾』(高橋昌, 2014年)
という一文があるのですが、具体的に通常のクラスに比べてどのような柔軟性が持たせられるのでしょうか。
CPP
1// 実装パターン 2// staticメンバ関数を持つポリシークラス 3struct policy { 4 static void draw() 5 { 6 std::cout << "draw" << std::endl; 7 } 8}; 9template <class Policy> 10struct widget { 11 void do_something() 12 { 13 Policy::draw(); 14 } 15};
CPP
1// 非静的メンバ関数を持つポリシークラス 2struct policy { 3 void draw() 4 { 5 std::cout << "draw" << std::endl; 6 } 7}; 8template <class Policy> 9class widget { 10 Policy policy_; 11public: 12 void do_something() 13 { 14 policy_.draw(); 15 } 16};
CPP
1// 継承によるポリシー 2class policy { 3protected: 4 void draw() 5 { 6 std::cout << "draw" << std::endl; 7 } 8}; 9template <class Policy> 10class widget : public Policy { 11public: 12 void do_something() 13 { 14 draw(); 15 } 16};
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/25 13:24
2019/06/26 13:56
2019/06/26 14:55