我正在使用vibe.d从类中生成一些REST接口。然而,vibe.d要求我同时提供接口和实现该接口的类。我的应用程序很小,只包含这个接口的一个实现,当我想做一些更改时,编辑这两个地方是非常烦人的。
所以问题是:有没有任何混合元素或模板可以从给定的class
定义中生成interface
?这应该很有可能实现,但我找不到任何例子。std.typecons
有WhiteHole
和BlackHole
来自动实现接口,但我想要与它们相反的东西。
谢谢。
可以编写这样的mixin,但这将产生一个循环依赖性问题-能够生成接口,但不能从中继承类。一个可能的解决方法是使用新的std.typecons.wrap分三步完成:
- 定义实际类
- 从中生成接口
- 创建一个包装器类,通过
std.typecons.wrap
将实际的一个映射到接口
如果您熟悉D元编程技术,那么这种mixin的实际实现就有些简单了。它可以归结为迭代类的所有方法,并将裸方法声明附加到结果字符串中,这些字符串稍后可以混合使用。克隆函数声明可以通过vibe.d内部的这个整洁的助手来完成:cloneFunction
确切的代码对于StackOverflow的回复来说有点太长了,但我很乐意为任何具体的问题提供详细的解释
也就是说,我倾向于同意同时需要接口和类是不必要的限制,应该可以使用裸类。最终,我将实现它,但它需要对模块代码进行大量更改,与我的TODO列表中的其他问题相比,它的优先级有些低。很抱歉给您带来不便。