多继承和可变参数模板

时间:2015-10-14 08:34:49

标签: c++ c++11 variadic-templates

考虑以下代码:

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

1 个答案:

答案 0 :(得分:2)

一个不错的用法是编译时间图。请参阅说明here

您可以将其用法与policy based design结合使用,以便在课堂制作中实现选择。