У меня есть D-миксин, который я хотел бы использовать для генерации оператора switch (в частности, значений регистра) для строковых значений, но, несмотря на то, что KeyValues
имеет записи в нем и предоставляет правильные значения ключа, регистр по умолчанию:всегда выполнялся только один:
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;
}
}
}
Я проверил это с жестко запрограммированными значениями, и это работает, как и ожидалось, поэтому я подозреваю, что я мог что-то не так делать с моим миксином.Как я могу заставить это работать как ожидалось?