Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
D 如何将Facebook/Warp输出转换为字符串?_D_Dmd - Fatal编程技术网

D 如何将Facebook/Warp输出转换为字符串?

D 如何将Facebook/Warp输出转换为字符串?,d,dmd,D,Dmd,好的,这就是我需要的: 我正在尝试将Warp()集成到我的D项目中 我需要将(预处理的)输出转换成字符串,而不是文件(目前的情况) 我已经很好地研究了资料来源,但不是D大师,我想我可能遗漏了一些明显的东西 键可能位于main.d: auto foutr = fout.lockingTextWriter(); // has destructor context.localStart(sf, &foutr);

好的,这就是我需要的:

  • 我正在尝试将Warp()集成到我的D项目中
  • 我需要将(预处理的)输出转换成字符串,而不是文件(目前的情况)
我已经很好地研究了资料来源,但不是D大师,我想我可能遗漏了一些明显的东西

键可能位于
main.d

            auto foutr = fout.lockingTextWriter();      // has destructor

            context.localStart(sf, &foutr);
            context.preprocess();
            context.localFinish();
使用
context.localStart()
需要
别名typeof(File.lockingTextWriter())R作为第二个参数(输出流?)

然而,我无法在文档中的任何地方发现这一点

有什么想法吗


更新

我想我很接近;我会发布一个完整的解决方案,一旦我100%确定。但这正是我在
context.d
中发现的(当然,单元测试是找到有用代码的好地方!哈哈)


我实际上没有看过这段代码,但是
lockingTextWriter
是D所称的输出范围

它只是一个包含名为
put
的方法的结构,该方法接受字符串作为参数。因此,您可以通过执行以下操作以字符串形式获取信息:

struct StringSink {
    string result;
    void put(in char[] s) { result ~= s; }
}


StringSink sink;
context.localStart(sf, &sink);
.....

string result = sink.result;

或者类似的东西。

Textbuf
的输出范围可能与我在thing中描述的输出范围相似。看起来它使用opSplice而不是.result来获取答案字符串tho.With
char[1000]tmpbuf=void;自动爆炸=文本爆炸!煤焦(tmpbuf)和上下文声明为
上下文!(Textbuf!char)
,我设法让它工作起来。要以字符串形式获得输出,您的想法很好,但只需执行一个简单的
!字符串(exputf[])
仍然有效!;-)是的,我记得Textbuf现在,Walter想要一些非常快的东西,所以他做了一件不分配的小事情(我的是一个简单的GC字符串!)。但不管怎样,都很酷。
struct StringSink {
    string result;
    void put(in char[] s) { result ~= s; }
}


StringSink sink;
context.localStart(sf, &sink);
.....

string result = sink.result;