我想用阿提拉·内夫斯的“概念”包。
我自己以一种简单的天真方式实现了对象对类型签名的检查。我可以根据我在编译时评估的委托块中定义的接口检查struct对象,以使它们与BetterC一起工作。我只对enum使用编译时函数求值,后者接收执行的委托代码块的返回值。
现在,我遇到了std.format.format的问题,它使用TypeInfo进行%s格式化程序,在BetterC中编译时会出现错误。对于代码生成,我想使用令牌字符串,因为它们具有语法突出显示。但正确使用它们需要字符串内插或字符串格式设置。core.stdc.stdio.snprintf是无可替代的,因为CTFE只能解释D源代码。
从技术上讲这不是个问题。我只需将令牌字符串转换为所见即所得字符串。
但我不知道为什么我不能用它。官方文档说,编译时特性对于BetterC来说是不受限制的(我假设这包括TypeInfo)。要么是完全错了,要么是我做错了。
template implementsType(alias symbol, type)
if (isAbstractClass!type)
{
enum implementsType = mixin(implementsTypeExpr);
enum implementsTypeExpr =
{
import std.format : format;
auto result = "";
static foreach(memberName; __traits(allMembers, type))
{
result ~= format(
q{__traits(compiles, __traits(getMember, symbol, "%1$s")) && }~
q{covariantSignature!(__traits(getMember, symbol, "%1$s"), __traits(getMember, type, "%1$s")) && }
, memberName);
}
return (result.length >= 3)? result[0 .. $-3] : result;
}();
}https://stackoverflow.com/questions/69262398
复制相似问题