D2.056
Функция - это структура, содержащая имя и тип функции (соответственно Имя и Тип).Binds перебирает список структур Function и возвращает строку mixin.Этот миксин определяет для каждой функции новое имя с добавлением «2».
void f() { writeln("f"); }
void g() { writeln("g"); }
struct Function(string name, Prototype)
{
const string Name = name;
mixin("alias Prototype Type;");
}
string Binds(Functions...)()
{
string r;
foreach (F; Functions)
{
// error:
r ~= to!string(typeid(F.Type)) ~ " " ~ F.Name ~ "2 = &" ~ F.Name ~ ";";
}
return r;
}
int main()
{
mixin (Binds!(
Function!("f", void function()),
Function!("g", void function())
));
f();
//f2();
return 0;
}
При компиляции to!string(typeid(F.Type))
выдает ошибку:
Error: Cannot interpret & D13TypeInfo_PFZv6__initZ at compile time
called from here: to(& D13TypeInfo_PFZv6__initZ)
called from here: Binds()
Во-первых, я нене понимаю, почему требуется явное преобразование в строку (не является ли typeid строкой, если нет, в чем разница между typeid и typeof?).
Во-вторых, я не могу понять, как получитьЯвный тип функции записан так, что он может быть выполнен в main.Я не могу использовать F.Type, поскольку он является локальным для foreach.