我正在线上编码问题,我想到了一个可以使测试真正有效的系统。我的计划是
主函数首先创建一个FILE *来存储测试用例,另一个FILE *创建一个空的输出文件。然后,它从命令行中指定的问题.cpp文件中调用该函数。
每个问题文件的函数原型如下所示:
static void问题(FILE * test_case,FILE *输出);
我的想法是将测试用例传递给特定问题,并让“问题”函数将结果写入输出文本文件。
我成功运行了针对特定问题的测试用例,并为每次运行获取了唯一的输出文件。
但是,我当前的问题是使main函数能够使用.cpp文件名作为参数。似乎在C ++中没有直接的方法来仅使用文件名从文件中调用函数。我知道预处理器解析.cpp文件并将函数名称转换为函数指针。有没有办法在运行时这样做?换句话说,我可以流式传输.cpp文件,搜索与我的函数原型匹配的行,并返回指向该函数的指针吗?是否有某种宏可以用来提示预处理器将文件的名称与其功能相关联?
从我到目前为止的搜索中,最简单的解决方案似乎是创建一个将函数名称与函数匹配的映射。这对我来说似乎很乏味且不优雅。我想我每次切换问题时都可以在主文件中手动更改函数调用,而不是在命令行中设置文件名。我也不愿意这样做。
答案 0 :(得分:0)
在标准C ++中,没有直接的方法可以做到这一点。但是,大多数实现提供了在运行时加载库和从这些库调用命名函数的工具。例如,在Windows下,可以调用LoadLibrary来加载命名的DLL,然后调用GetProcAddress来获取指向可命名的可调用(C)函数的指针。其他操作系统提供类似的功能。这不像它看起来那么有用,并且往往导致脆弱的代码。
答案 1 :(得分:0)
您的文件可以有一个静态全局的类。在它的构造函数中传递函数地址。此构造函数更新可由主框架调用的函数的全局向量。如果需要输入和输出文件名,则将它们添加到构造函数的参数列表和向量中。