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

在D中实现C风格的sizeof()函数,d,sizeof,ctfe,D,Sizeof,Ctfe,我想在d中实现一个C风格的sizeof()函数(我知道.sizeof的内容,但它有助于移植大量C(C99)) 显然,我希望它能够在编译时运行,并将类型或表达式作为参数。理想情况下,如果可能的话,我希望它具有与C相同的语法,而不是使用独特的模板调用语法,因为这将大大提高它的实用性。这是可能的吗?如果我理解正确,您需要类似于下面的size函数的行为? size2将是一个运行时函数,这在D中当然有点毫无意义。但是您仍然可以使用enum val=size2(2+2)从CT的size2获取值。这对你有帮助

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


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

如果我理解正确,您需要类似于下面的
size
函数的行为?
size2
将是一个运行时函数,这在D中当然有点毫无意义。但是您仍然可以使用
enum val=size2(2+2)从CT的
size2
获取值。这对你有帮助吗

模板大小(T)
{
枚举大小=T.sizeof;
}
//表达
模板大小(别名T)
{
枚举大小=T.sizeof;
}
自动尺寸2(T)(T x)
{
返回T.sizeof;
}
void main(字符串[]args)
{
导入标准stdio:writeln;
writeln(size!int);//4
writeln(大小!长);//8
writeln(大小!(1+1));//4
writeln(大小2(2));//4
writeln(size2(2L));//8
writeln(大小2(2+2));//4
}

size\u t sizeof(t)(tx){return t.sizeof;}//是一个彻底的失败-我的第一个注定失败的尝试size\u t sizeof(t)({return t.sizeof;}size\u t sizeof(t)(tx){return t.sizeof;}//那么这就是这个。顺便问一下,你知道这个指南吗?是的,我直接浏览了网站的那一部分。不过,我还是个新来的。我现在正在重读阿里·切赫雷利的在线书,非常有帮助。遗憾的是,这些例子有点罗嗦和不切实际,但是当你需要保持简洁并专注于你打算展示的功能时,你在教程中只能做这么多。虽然它仍然在WIP中,但DLang巡回赛也提供了一些材料,例如,谢谢。这当然是一个值得的进步。我仍然需要试着摆脱这个问题!调用时需要它的地方。第二件事是,sizeof是D中的一个保留字吗?我可以简单地调用函数或模板“sizeof”吗?没有必要,因为在移植C时,需要对sizeof进行全局搜索,并用size2(或者其他不太繁重的东西)替换sizeof(或者其他任何东西)。我想把这标记为“答案”,但我甚至不确定我的愿望是否真的存在。好吧,这是一个权威性的“不可能”这绝对是一个答案。也许我应该贿赂Walter Bright!:-)你的函数真的是一个非编译时函数吗?等我的手没有那么痛的时候,我会考虑你的建议。>第二件事是,sizeof在D中是一个保留字吗?我真的可以简单地将函数或模板称为“sizeof”吗?没有,我只是选择了大小2以使其更清晰。