可变参数模板复合继承生成
variadic template complex inheritance generation
玩了一下可变参数模板,试图看看可以用它们做什么,我发现自己想知道一些事情:
假设我有一个类,它可以将其他几个类作为模板参数,每个类都有一个嵌套类(我们称之为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。
有什么东西可以做到这样的事情吗?我个人想不出办法,但也许有可能。像亚历山德雷斯库的层次结构生成器(可以在洛基:http://loki-lib.sourceforge.net/html/a00653.html 中找到)这样的继承层次结构构建器会有所帮助吗?
如果有人有想法,提前感谢。
要使InnerClass
派生自所有nested_class
es,您应该使用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++
- 为什么在保护模式下继承升级不起作用
- 通过继承类使用来自不同命名空间的运算符
- 子目录是否继承属性,例如add_definitions,include_directories和父Cmakelist.t
- 混合组合和继承的C++问题
- 继承:构造函数,初始化C++11中基类的类C数组成员
- 从类继承时,继承的类是否会通过父类重新定义继承的变量
- 公共与私人继承
- 如何创建从同一类继承的不同对象的向量
- 如何从另一个文件继承私有成员变量和公共函数
- 在模板基类中为继承类中的可选重写生成虚拟方法
- 带有继承的C++工厂
- 我应该避免多重实现继承吗
- C++继承更改成员
- 从具有默认值的部分指定模板类继承时发生SWIG错误,具有不带默认值的正向声明
- 关于C++中具有多重继承"this"指针的说明
- 从值类继承还是复合它?
- 可变参数模板复合继承生成