且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

可变模板复合遗传生成

更新时间:2023-10-25 23:49:46

使 InnerClass > nested_class es,你应该使用 Classes :: nested_class ... 模式:

To make InnerClass derived from all nested_classes, you should use Classes::nested_class... pattern:

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