【发布时间】:2017-03-01 21:53:24
【问题描述】:
我正在在线解决编码问题,我想到了一个可以使测试真正高效的系统。我的计划是
- 为每个问题提供一个不同的 .cpp 文件,其中包含一个解决问题并将结果输出到 .txt 文件的函数
- 创建一个带有 main 函数的 .cpp 文件,该函数接受 2 个命令行参数:一个字符串是我当前正在解决的问题的文件名,一个字符串是要用于该问题的测试用例的文件名。
main 函数首先创建一个 FILE* 来存储测试用例,另一个 FILE* 来创建一个空的输出文件。然后,它从命令行中指定的问题 .cpp 文件中调用该函数。
每个问题文件的函数原型如下所示:
static void Problem(FILE* test_case, FILE* output);
想法是将测试用例传递给特定问题,并让“问题”函数将结果写入输出文本文件。
我已成功运行特定问题的测试用例,并为每次运行获取唯一的输出文件。
但是,我当前的问题是启用 main 函数以使用 .cpp 文件名作为参数。在 C++ 中似乎没有直接的方法可以仅使用文件名从文件中调用函数。我知道预处理器会解析 .cpp 文件并将函数名转换为函数指针。有没有办法在运行时做到这一点?换句话说,我可以流式传输 .cpp 文件,搜索与我的函数原型匹配的行,然后返回指向该函数的指针吗?我可以使用某种宏来提示预处理器将文件名与其功能相关联吗?
到目前为止,从我对答案的搜索来看,最简单的解决方案似乎是创建一个将函数名称与函数匹配的映射。这对我来说似乎很乏味和不雅。我想我还不如每次切换问题时在我的主文件中手动更改函数调用,而不是在命令行中设置文件的名称。我也不喜欢这样做。
【问题讨论】:
-
其实可以这样做,但这意味着将源代码编译成可加载库,加载库,调用函数,然后保存结果。它涉及将库中的动态链接到要测试的整个应用程序和管理安全问题,这样您就不会打开可测试的应用程序受到攻击。这是表面上看起来很容易但具有层层增加复杂性的问题之一。如果你想继续学习,我建议你学习操作系统课程。
-
由于你的函数是静态的,它们将不能被任何程序直接调用。即使它们被链接到。