1
7
考虑先使用经过测试的解决方案- Boost.TypeTraits 为了拯救我们:
|
2
3
要以面向对象的方式执行此操作,您需要虚拟继承来确保
正如其他人所说,您可以做一些类似于第二次尝试使用模板获取静态多态性的事情。
你尝试的角色是不可能的,例如
编辑 :或者,如果您不想使用模板,也不喜欢定义所有可能的接口组的组合爆炸,则可以定义函数,将每个接口作为单独的参数:
|
3
1
使用模板元编程可以达到以下效果:
对于提供bar()和baz()的类,将正常工作,并且无法为任何其他类编译。 |
4
1
你所能做的就是用一个模板化的构造函数创建一个类,它接受一个任意的指针,使用隐式下推得到你想要的两个接口,然后实现这个组合接口。
然后编写一个接受IFooAndBar*的函数(如果两个接口都是必需的),调用方可以在堆栈上构造一个FooAndBarCompositor,它将分派给它们选择的对象。看起来像:
这不是很一般,并强制您在合成器中编写分派函数。另一种方法是使用通用接口合成器模板:
然后这个函数看起来像:
这要求要强制多个接口的函数在需要A*或B*的地方(例如赋值或函数参数)使用合成器,或者显式调用适当的AsX()方法。具体来说,不能从->运算符的使用推断要使用的接口,*运算符对组合没有任何意义。 如果使用通用代码,则可以使用相同的模板来强制该对象同时支持IBar和IBaz。 C++0X将引入可变模板,将允许这个概念扩展到任意数量的接口类。 |
Brendan · Java中从父类继承的对象的ArrayList 2 年前 |
Tali · 继承-您应该使用基类,还是它们只是子类的框架? 2 年前 |
mask2 · 如何轻松访问继承类的功能? 2 年前 |
Dimon · 父类中的Setter,以及一些没有参数的子类 2 年前 |
Miguerurso · Javascript类继承无法正常工作 2 年前 |
GuessMe · 返回新类对象的正确方法(也可以扩展) 2 年前 |
Daniel Lizik · 重写父类构造函数的子类成员初始值设定项 2 年前 |
i_know_what · 以基类作为参数重写错误的方法 2 年前 |