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 { ... };
但是你已經回答了自己:'測試測試;' –
SingerOfTheFall
這是[使用這個特性的一個小例子](https://github.com/snawaz/cson).. [這是文件] (https://github.com/snawaz/cson/blob/master/include/cson/cson.h%2B%2B),你可以看看。這是[更大,更復雜的示例](https://github.com/snawaz/tagsql),廣泛使用此功能。 – Nawaz