c++ - 多重继承和可变参数模板

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

最佳答案

一个不错的用法是编译时映射。引用说明here .

您可以将其用法与 policy based design 结合使用在类制作中实现选择的爆炸式增长。

关于c++ - 多重继承和可变参数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33120417/

相关文章:

用 [] 替换 .at() 的 C++ 宏

c++ - 为什么 “memory_order_relaxed”在我的系统中被视为 “memory_order_seq_cst” [C++]

c++ - 为什么 memory_order 作为 std::atomic 函数的运行时参数给出

c++ - 默认参数和参数包之间的交互(GCC 和 clang 不同意)

c++ - 新的 Qt 在没有这个的情况下通过重载发出语法错误信号

c++ - PE文件中的MZ签名有什么用?

c++ - 如何为模板类的 const ref 成员定义 move 赋值运算符

c++ - 继承自任意数量的模板模板类

C++17 if constexpr() 与元组一起使用

c++ - 使用 clang 编译 std::tuple 时遇到问题