D mixins与字符串开关语句

时间:2011-07-31 03:38:29

标签: d mixins

我有一个D mixin,我想用它来生成一个关于字符串值的switch语句(特别是case值),但是尽管KeyValues中有条目并提供正确的键值,默认情况下case总是唯一执行的:

class DataStore(KeyValues...) {
    void stringSetData(string key, string data) {
        switch(key) {
            foreach(D; KeyValues) {
                mixin("case \"" ~ D.Name ~ "\": set(to!(D.Type)(data)); break;");
            }
            default:
                throw new Exception("Invalid meta key"); break;
        }
    }
}

我用硬编码的值测试了它,并且它按预期工作,所以我怀疑我可能在我的mixin本身做错了。我怎样才能让它按预期工作?

1 个答案:

答案 0 :(得分:5)

mixin中的break正在从foreach循环中断开,而不是switch。将其替换为return或标有break

顺便说一句,如果您尝试在启用警告的情况下编译此代码,则会从DMD收到一些奇怪的错误消息。