编译存储在Ruby字符串中的C ++代码,而不将其写入文件

时间:2015-06-04 07:33:50

标签: c++ ruby

我正在编写一个Ruby代码,它生成一个包含C ++程序的字符串。例如,Ruby字符串可能包含:

#include <iostream>
using namespace std;int main(){cout<<"Hello World"<<endl;return 0;}

为了运行存储在Ruby字符串中的C ++程序,我将字符串写入名为c_prog.cpp的文件中,然后使用:

%x( g++ c_prog.cpp -o output )

在文件中编译C ++程序,然后使用:

value = %x( ./output )

然后打印该值。

由于存储在Ruby字符串中的C ++程序非常长(数千个LOC),因此将其写入文件会浪费一些时间。有没有什么办法可以编译存储在字符串中的程序而不将其写入文件?我的意思是:

%x( g++ 'the ruby string' -o output )

而不是:

%x( g++ c_prog.cpp -o output )

2 个答案:

答案 0 :(得分:3)

您可以将单个短划线作为文件名传递,以告知g++从STDIN读取。所以,

%x( echo 'the ruby string' | g++ -o output -x c++ - )

应该做的伎俩。请参阅this related question

答案 1 :(得分:2)

您可以使用PTY库直接管道进入g++进程:

require 'pty'

m, s = PTY.open
r, w = IO.pipe
pid = spawn("g++ -o output -x c++ -", :in=>r, :out=>s)
r.close
s.close
w.puts "#include <iostream>\n int main(){std::cout << \"Hello World\" << std::endl;}"
w.close