2015-10-14 8 views
6

は、このコードを考えてみましょう:私たちは、コンパイラを見ることができるように多重継承と可変長テンプレート

#include <string> 
#include <iostream> 

class Foo 
{ 
protected: 
    void foo(){ std::cout << "foo" << std::endl; } 
}; 

class Bar 
{ 
protected: 
    void bar(){ std::cout << "bar" << std::endl; } 
}; 

template<typename... Args> 
class Test: public Args... 
{ 
public: 
    void test() 
    { 
      this->foo(); 
      this->bar(); 
    } 
}; 

int main(int argc, char** argv) 
{ 
    Test<Foo, Bar> test; 
    test.test(); 
    return 0; 
} 

は、私たちは、パラメータパックを継承することができます。しかし、この機能が必要な時は?それを正しく使うには?

更新

私はNawazが提供しているようないくつかのユースケースを見てみたいです。 私が見る唯一のユースケース - ポリシーベースのデザインが、我々は必要なポリシーのリストを適用した場合、より良いではないであろうように:

template<typename T, typename Policy1, typename Policy2, typename Policy3> 
class SomeClass: public Policy1, public Policy2, public Policy3 { ... }; 
+0

しかし、あなたは自分自身に答えました: 'Testtest;' – SingerOfTheFall

+3

この機能を使っている[1つの小さな例](https://github.com/snawaz/cson)です。[これはファイルです] (https://github.com/snawaz/cson/blob/master/include/cson/cson.h%2B%2B)をご覧ください。そして、この機能を広範に使用する[より大きな、より複雑な例](https://github.com/snawaz/tagsql)があります。 – Nawaz

答えて

2

一つの素敵な使用法は、タイムマップをコンパイルしています。説明hereを参照してください。

policy based designと組み合わせて使用​​して、クラス作成の選択肢を広げることができます。