C++ 使用文件名作为字符串从任意souce.cpp文件调用函数
我正在网上处理编码问题,我想到了一个可以使测试真正高效的系统。我的计划是C++ 使用文件名作为字符串从任意souce.cpp文件调用函数,c++,function,macros,C++,Function,Macros,我正在网上处理编码问题,我想到了一个可以使测试真正高效的系统。我的计划是 为每个问题提供一个不同的.cpp文件,其中包含一个解决问题的函数,并将结果输出到.txt文件 创建一个.cpp文件,其main函数接受两个命令行参数:一个字符串(我当前正在解决的问题的文件名)和一个字符串(用于该问题的测试用例的文件名) main函数首先创建一个文件*来存储测试用例,然后创建另一个文件*来创建一个空输出文件。然后,它从命令行中指定的problem.cpp文件调用该函数 每个问题文件的函数原型如下所示: 静态
从我迄今为止对答案的搜索来看,最简单的解决方案似乎是创建一个映射,使函数名与函数匹配。这对我来说既乏味又不雅观。我想,每次切换问题时,我最好在主文件中手动更改函数调用,而不是在命令行中设置文件名。我也不想这样做标准C++中没有直接的方法来做这件事。但是,大多数实现都提供了在运行时加载库和从这些库调用命名函数的功能。例如,在Windows下,可以调用LoadLibrary加载命名DLL,然后调用GetProcAddress获取指向命名可调用(C)函数的指针。其他操作系统也提供类似的功能。这并不像它看起来那么有用,而且往往会导致脆弱的代码。您的文件可能有一个静态全局类。在其构造函数中传递函数地址。此构造函数更新可由主框架调用的函数的全局向量。如果需要输入和输出文件名,则将它们添加到构造函数的参数列表和向量中。实际上可以这样做,但这意味着将源代码编译到可加载库中,加载库,调用函数,然后保存结果。它涉及到在库中动态链接到要测试的整个应用程序,并管理安全问题,以便您不会打开可测试的应用程序遭受攻击。这是一个表面上看起来很简单,但层次越来越复杂的问题。如果你想继续学习的话,我建议你学习操作系统方面的课程。因为你的函数是静态的,它们不能直接从任何程序调用。即使它们被链接到。有,这将允许您创建您的测试用例作为“插件”与一个共同的接口。然后,这些测试用例插件可以由主应用程序动态加载。从外观上看,它看起来相当容易使用。也许可以作为直接调用LoadLibrary和GetProcAddress来缓解“脆弱性”问题的替代方法。