多继承和可变参数模板

Fil*_*pok 6 c++ variadic-templates c++11

考虑以下代码:

#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;
}
Run Code Online (Sandbox Code Playgroud)

我们可以看到编译器允许我们从参数包继承.但是,当我们需要这个功能时?如何正确使用?

更新

我想看看Nawaz提供的一些用例.我看到的唯一用例 - 基于策略的设计,但如果我们强制执行所需的策略列表,那就不会更好:

template<typename T, typename Policy1, typename Policy2, typename Policy3>
class SomeClass: public Policy1, public Policy2, public Policy3 { ... }; 
Run Code Online (Sandbox Code Playgroud)

Ama*_*man 1

一种很好的用法是编译时映射。请参阅此处的说明。

您可以将其使用与基于策略的设计结合起来,以实现课堂制作中选择的爆炸式增长。