我想在 D 中实现一个 C 风格的 sizeof() 函数。(我知道 .sizeof 的东西,但它有助于移植很多 C(C99)。)
我希望它能够在编译时运行,显然并将类型或表达式作为参数。理想情况下,如果可能的话,我希望它具有与 C 相同的语法,而不是使用独特的模板调用语法,因为这会大大增加它的实用性。这是可能吗?
如果我对您的理解正确,您是否想要类似于以下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
}