C ++程序转储锅炉板C ++

时间:2014-02-25 21:10:39

标签: c++

我有一个转储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:1Snippet:1自成一体。但

  • 如果我将函数分成单独的文件`bp()`到`bp.cc`和`mix()`到`mix.cc`我该怎么把它作为单个可执行文件发送?我需要发送`bp.cc`和`mix.cc`以及可执行文件。我不希望用户访问`bp.cc`和`mix.cc`。
  • 是否有更好的方法来重写`Snippet:1`而不是我建议更好地满足我的需求?

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;
}