考虑以下代码:
#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 { ... };