我有一个转储C ++程序的C ++程序。一些功能是锅炉板代码,某些功能有锅炉板代码和基于一些变量定制的代码。
简化示例如下:
// Snippet: 1
#include <fstream>
using namespace std;
int main()
{
ofstream fout("output.cc");
// bp() has just boiler plate code
fout << "void bp() {" << endl;
fout << "std::cout << \"Hello World!\" << std::endl" << endl;
// a few hundred lines of C++ code send to fout
fout << "}" << endl;
// mix() has boiler plate + some custom code
int size = 4096;
fout << "void mix() {" << endl;
fout << "char buffer[" << size << "];" << endl;
// a few hundred lines of C++ code send to fout
fout << "}" << endl;
// compile output.cc into *.so and delete output.cc
return 0;
}
output.cc
被编译,用户获取*.so
文件。用户无权访问output.cc
。
我想重写一下,因为当它位于fout
内时很难读取锅炉铭牌代码并且有转义报价使它成为一场噩梦。因此我想到将函数存储在一个单独的文件中。例如bp()
中有bp.cc
:
// file: bp.cc
void bp() {
std::cout << "Hello World" << std::endl
// a few hundred lines of C++ code
}
然后主文件可以是written
int main()
{
std::ifstream src("bp.cc");
std::ofstream dst("output.cc");
dst << src.rdbuf();
}
如果是mix()
,我会在mix()
中存储函数mix.cc
来使用Form-Letter Programming。
当使用bp()
转储mix()
和fout
函数时,我需要做的就是发送可执行文件,因为Snippet:1
是Snippet:1
自成一体。但
答案 0 :(得分:3)
您可以使用原始字符串文字,只需将代码放入其中一个:
#include <iostream>
char const source[] = R"end(
#include <iostream>
int main() {
std::cout << "hello, world\n";
}
)end";
int main()
{
std::cout << source;
}