【问题标题】:Is there a way to generate interface from class in D using mixin or template?有没有办法使用 mixin 或模板从 D 中的类生成接口?
【发布时间】:2013-12-10 07:21:04
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: templates d mixins vibed


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-01
      • 2011-10-12
      • 2021-08-26
      • 2012-03-20
      • 1970-01-01
      • 2019-08-16
      • 1970-01-01
      • 2017-11-07
      • 2022-12-17
      相关资源
      最近更新 更多