2015-10-14 38 views
6

bu kodu göz önünde bulundurun: biz derleyici Görüldüğü gibiçoklu kalıtım ve variadic şablonları

#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; 
} 

bize parametre paketten devralmak için izin verir. Ama bu özelliğe ihtiyacımız olduğunda? Nasıl düzgün kullanılır?

Ben Nawaz sağlamıştır gibi bazı kullanım durumlarını görmek istiyorum

Güncelleme. gördüğüm tek kullanım durumunda - politika tabanlı tasarım, ama biz gibi gerekli politika listesi itaat edersen daha iyi olmaz:

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

Ama kendiniz cevap verdiniz: 'Test testi;' – SingerOfTheFall

+3

İşte bu özelliği kullanan [küçük bir örnek] (https://github.com/snawaz/cson) var .. ve [bu dosya] Bakabileceğiniz (https://github.com/snawaz/cson/blob/master/include/cson/cson.h%2B%2B). Ve işte bu özelliği yoğun olarak kullanan [daha büyük, daha karmaşık bir örnek] (https://github.com/snawaz/tagsql). – Nawaz

cevap

2

Bir güzel kullanım süresi harita derlemek olduğunu. here açıklamasına bakın.

Sınıf oluşturmada seçeneklerin patlaması için kullanımını policy based design ile birleştirebilirsiniz.

İlgili konular