1

D で C スタイルの sizeof() 関数を実装したいと考えています (.sizeof については知っていますが、多くの C (C99) を移植するのに役立ちます)。

コンパイル時に実行できるようにしたいのは明らかで、型または式を引数として取ります。理想的には、独自のテンプレート呼び出し構文を使用するのではなく、可能であれば、C と同じ構文を使用したいと考えています。これにより、その有用性が大幅に向上します。これはまったく可能ですか?

4

1 に答える 1

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
}
于 2016-08-19T00:57:53.107 に答える