有没有办法使用mixin或模板从D中的类生成接口?

时间:2013-12-10 07:21:05

标签: templates d mixins vibed

我正在使用vibe.d从类生成一些REST接口。但是,vibe.d要求我提供实现此接口的接口和类。我的应用程序很小,只包含一个这个接口的实现,当我想进行一些更改时,编辑这两个地方非常烦人。

所以问题是:是否有任何mixin或模板可以从给定的interface定义生成class?这应该很有可能实现,但我找不到任何例子。 std.typeconsWhiteHoleBlackHole自动实现接口,但我想要与它们相反的东西。

谢谢。

1 个答案:

答案 0 :(得分:3)

可以编写这样的mixin,但这会产生循环依赖性问题 - 能够生成接口但不能从中继承类。一种可能的解决方法是使用新的std.typecons.wrap分三步完成:

  • 定义实际的课程
  • 从中生成界面
  • 创建一个包装类,通过std.typecons.wrap
  • 将实际的一个映射到接口

如果您熟悉D元编程技术,那么这种mixin的实际实现有点简单。它归结为遍历类的所有方法并将裸方法声明附加到结果字符串,稍后可以将其混合。克隆函数声明可以通过vibe.d internals中存在的这个整洁的助手来完成:cloneFunction

对于StackOverflow回复,确切的代码有点太长了,但我很乐意提供有关它的任何具体问题的详细解释。

那就是说,我倾向于同意要求接口和类都是不必要的限制,应该可以使用裸类。最终我将实现它,但它需要在模块代码中进行相当多的更改,并且与我的TODO列表中的其他一些当前问题相比,它的优先级稍低。很抱歉给您带来不便。