【发布时间】:2014-06-16 08:14:27
【问题描述】:
我已经创建了一个框架,每个派生自Action 的类都需要有一些神奇的功能,例如依赖于此类字段的静态方法等。
我正在使用mixin template 来实现这一点:
mixin template ACTION(T:Action){
static string url() {
//in real code this is analysing fields of T class.
return "foo";
}
//some other stuff
}
abstract class Action {
}
class FooAction : Action {
mixin ACTION!(FooAction);
//custom Foo methods
}
class BarAction : Action {
mixin ACTION!(BarAction);
//custom Bar methods
}
这很有效,并且完全符合我的需要,但它并不完全干燥,因为我必须在每个非抽象子类中包含 mixin ACTION!(Subclass);。没有任何情况下我想要一个没有这个 mixin 的子类。
所以通常我最终得到了来自 C++/Qt 的 Q_OBJECT 宏。
由于 D lang 称赞自己非常动态,也许有一种方法可以避免这种重复并自动将该模板混入每个子类中?
所以我的代码完全相同:
class FooAction : Action {
//custom Foo methods
}
class BarAction : Action {
//custom Bar methods
}
【问题讨论】:
-
也许特质之类的东西会有用? dlang.org/traits.html
标签: d template-mixins