<分区>
考虑这段代码:
#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 { ... };