Реализация функции 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
}
Другие вопросы по тегам