问一个元编程问题
ahadf
2007-10-10
有没有办法能检测出是否某个类已经mixin某个template呢?
例如: template enable_sth(){} class A{ mixin enable_sth!(); } class B:A{ mixin enable_sth!();//重复了,有没有办法判断出超类中已经mixin了这个模块? } |
|
oldrev
2007-10-10
一个笨办法,用我写的那个 HasMember 模板:
import std.stdio; template HasMember(T, string member) { const bool HasMember = is(typeof(mixin("T." ~ member))); } template Mixable() { struct MixableTag; } class Base { mixin Mixable; } class Foo : Base { static if(HasMember!(typeof(this), "MixableTag")) { pragma(msg, "Say hello to Mixable!"); } } void main() { } GDC 0.24 编译通过 |
|
ahadf
2007-10-10
哦,谢谢。问一下,可预见的将来,D有没有加入类似concept特性的意向?
|
|
oldrev
2007-10-10
最近应该是不会有,等 C++ 实验实验再加也不迟嘛
|