3

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

假设我有一个可以将其他几个类作为模板参数的类,每个类都有一个嵌套类(我们称之为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 有它的嵌套类 InnerClass,它继承了 A1::nested_class 和 A2::nested_class。

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

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

4

1 回答 1

6

要从InnerClass所有 es 派生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;
}
于 2013-09-20T09:40:18.100 回答