在D中实现C风格的sizeof()函数

时间:2016-08-19 00:40:46

标签: d sizeof ctfe

我想在D中实现一个C风格的sizeof()函数。(我知道.sizeof的东西,但它有助于移植大量的C(C99)。)

我希望它能够在编译时运行,显然可以将类型或表达式作为参数。理想情况下,我希望它具有与C相同的语法,如果可能的话,而不是使用独特的模板调用语法,因为这将大大增加其实用性。这有可能吗?

1 个答案:

答案 0 :(得分:1)

如果我理解正确,您需要的行为类似于下面的size功能吗? size2将是一个运行时函数,当然在D中有点无意义。但是你仍然可以通过size2从CT获得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
}