Ответ 1
У меня есть несколько сообщений D Tip в блоге (1 2 3).
Здесь один: Тестирование с помощью TypeTuple
При тестировании функции обычно рекомендуется протестировать ее с различными входами. Для этого вы можете легко использовать цикл for над массивом входных значений, но что, если ваш ввод является типом, как это часто бывает с кодом шаблона?
Язык программирования D позволяет вам перебирать TypeTuple, поэтому все, что вам нужно сделать, это объявить кортеж всех типов, которые вы хотите протестировать, и перебирать их обычным способом:
import std.typetuple;
alias TypeTuple!(int, long, double) Types;
foreach (T; Types)
test!T();
Вы можете задаться вопросом, к чему это компилируется. В конце концов, тело цикла меняется с T, поэтому сгенерированный код также должен меняться на каждой итерации. Как компилятор справляется с этим?
Ответ заключается в том, что цикл полностью развернут. Вышеупомянутый код буквально совпадает с:
test!int();
test!long();
test!double();
По этой причине вам может потребоваться следить за размером ваших TypeTuples, чтобы избежать раздувания кода.