尝试使用可变模板来尝试看看可以用它们做什么,我发现自己想知道一些事情:
假设我有一个类可以将其他几个类作为模板参数,每个类都有一个嵌套类(我们称之为 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/