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项目中
- 我需要将(预处理的)输出转换成字符串,而不是文件(目前的情况)
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.Withchar[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;