首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在BetterC模式下进行字符串格式化?

如何在BetterC模式下进行字符串格式化?
EN

Stack Overflow用户
提问于 2021-09-21 01:21:01
回答 1查看 86关注 0票数 0

我想用阿提拉·内夫斯的“概念”包。

我自己以一种简单的天真方式实现了对象对类型签名的检查。我可以根据我在编译时评估的委托块中定义的接口检查struct对象,以使它们与BetterC一起工作。我只对enum使用编译时函数求值,后者接收执行的委托代码块的返回值。

现在,我遇到了std.format.format的问题,它使用TypeInfo进行%s格式化程序,在BetterC中编译时会出现错误。对于代码生成,我想使用令牌字符串,因为它们具有语法突出显示。但正确使用它们需要字符串内插或字符串格式设置。core.stdc.stdio.snprintf是无可替代的,因为CTFE只能解释D源代码。

从技术上讲这不是个问题。我只需将令牌字符串转换为所见即所得字符串。

但我不知道为什么我不能用它。官方文档说,编译时特性对于BetterC来说是不受限制的(我假设这包括TypeInfo)。要么是完全错了,要么是我做错了。

代码语言:javascript
复制
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;
    }();
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-21 18:16:28

TypeInfo不可用和BetterC。

有一个bc-字符串 dub包,它提供了一个在BetterC中工作的有限的字符串格式化程序。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69262398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档