C++ 可变模板复杂继承生成

C++ 可变模板复杂继承生成,c++,c++11,variadic-templates,C++,C++11,Variadic Templates,玩一玩可变模板,看看能用它们做些什么,我发现自己在想一些事情: 假设我有一个类,它可以接受其他几个类作为模板参数,每个类都有一个嵌套类(我们称之为嵌套类): 模板类MyClass{ 类内部类{…}; }; 我想要实现的是在MyClass内部,创建一个从嵌套类的每个参数类继承的类 例如: class A1 { public: struct nested_class { do_stuff() { ... } }; }; class A2 { public:

玩一玩可变模板,看看能用它们做些什么,我发现自己在想一些事情:

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

模板类MyClass{
类内部类{…};
};
我想要实现的是在MyClass内部,创建一个从嵌套类的每个参数类继承的类

例如:

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

using C = MyClass<A1, A2>;
A1级{
公众:
结构嵌套类{
do_stuff(){…}
};
};
A2类{
公众:
结构嵌套类{
做其他的事({…}
};
};
使用C=MyClass)会有帮助吗


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

要使
InnerClass
从所有
嵌套类
派生,您应该使用
类::嵌套类…
模式:

#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;
}
#包括
#包括
模板
类Myclass
{
公众:
类内部类:公共类::嵌套类。。。
{
};
};
A1类{
公众:
结构嵌套类{
void do_stuff(){/*…*/}
};
};
A2类{
公众:
结构嵌套类{
void do_other_stuff(){/*…*/}
};
};
int main()
{
使用Class=Myclass;
标准::cout
#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;
}