Реализация функции sizeof() в стиле C в D
Я хотел бы реализовать функцию sizeof() в C-стиле в D. (Я знаю о.sizeof, но это поможет в портировании большого количества C (C99).)
Я хочу, чтобы он мог запускаться во время компиляции, очевидно, и принимать тип или выражение в качестве аргумента. В идеале мне бы хотелось, чтобы он имел такой же синтаксис, как C, если это вообще возможно, а не использовал бы особый синтаксис вызова шаблона, поскольку это значительно увеличило бы его полезность. Это вообще возможно?
1 ответ
Если я вас правильно понимаю, вы хотите поведение, подобное size
функция ниже?size2
будет функция времени выполнения, которая, конечно, немного бессмысленно в D. Однако вы все еще можете получить значение из size2
на КТ с enum val = size2(2 + 2);
, Вам это поможет?
template size(T)
{
enum size = T.sizeof;
}
// for expressions
template size(alias T)
{
enum size = T.sizeof;
}
auto size2(T)(T x)
{
return T.sizeof;
}
void main(string[] args)
{
import std.stdio : writeln;
writeln(size!int); // 4
writeln(size!long); // 8
writeln(size!(1 + 1)); // 4
writeln(size2(2)); // 4
writeln(size2(2L)); // 8
writeln(size2(2 + 2)); // 4
}