c++ - 可变参数模板复杂继承生成

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

尝试使用可变模板来尝试看看可以用它们做什么,我发现自己想知道一些事情:

假设我有一个类可以将其他几个类作为模板参数,每个类都有一个嵌套类(我们称之为 nested_class):

template<typename... Classes> class MyClass {
    class InnerClass { ... };
};

我想实现的是在 MyClass 内部,创建一个继承自每个参数类嵌套类的类。

例如:

class A1 {
public:
    struct nested_class {
        do_stuff() { ... }
    };
};
class A2 {
public:
    struct nested_class {
        do_other_stuff() { ... }
    };
};

using C = MyClass<A1, A2>;

想法是 C 具有继承 A1::nested_class 和 A2::nested_class 的嵌套类 InnerClass。

有什么东西可以达到这样的效果吗?我个人想不出办法,但也许有可能。 像 Alexandrescu 的 Hierarchy Generators(可以在 Loki 中找到:http://loki-lib.sourceforge.net/html/a00653.html)这样的继承层次构建器会有帮助吗?

如果有人有想法,请提前致谢。

最佳答案

要使 InnerClass 从所有 nested_class 派生,您应该使用 Classes::nested_class... 模式:

#include <iostream>
#include <type_traits>

template <class... Classes>
class Myclass
{
public:
    class InnerClass: public Classes::nested_class...
    {

    };
};

class A1 {
public:
    struct nested_class {
        void do_stuff() { /*...*/ }
    };
};
class A2 {
public:
    struct nested_class {
        void do_other_stuff() { /*...*/ }
    };
};

int main()
{
    using Class = Myclass<A1, A2>;

    std::cout << std::is_base_of<A1::nested_class, Class::InnerClass>::value << std::endl;
    std::cout << std::is_base_of<A2::nested_class, Class::InnerClass>::value << std::endl;

    return 0;
}

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

相关文章:

c++ - "std::is_callable"在 C++17 中被 "std::is_invocable"替换了吗?

c++ - 专门化采用通用引用参数的函数模板

c++ - 扩展参数包的默认函数参数 "fill in"可以吗?

c++ - 创建一个包含不同驱动类元素的元组,其构造函数接收一个 int 类型,由其在元组中的索引确定

c++ - 将成员函数传递给可变参数模板函数

c++ - 如何在 C++ 中使用 cin 退出

c++ - 基于 Qt 的 UI 是否足够可靠以用于医疗设备?

c++ - std::unique_ptr 中的不可复制删除器

c++ - 函数内的静态 constexpr 变量是否有意义?

c++ - 静态变量的参数包扩展