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

标签 templates d mixins vibed

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

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

谢谢你。

最佳答案

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

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

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

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

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

    关于templates - 有没有办法使用 mixin 或模板从 D 中的类生成接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20488411/

    相关文章:

    c++ - 展开和转发阵列

    c++ - 从其(部分)特化调用类模板的静态函数

    reference - D 中的赋值操作会复制对象吗?

    d - std.algorithm.find 应该要求对范围元素的引用吗?

    ruby - 是否可以混合使用模块方法?

    c++ - 模板继承问题

    multithreading - 用户定义的结构不能通过 tid.send 传递

    javascript - 有没有类似 Ruby 的 JavaScript 模块

    vue.js - 将 prop 传递给 vuejs mixin 但属性未定义

    c++ - 如何理解#1664的提议决议