Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用文件名作为字符串从任意souce.cpp文件调用函数_C++_Function_Macros - Fatal编程技术网

C++ 使用文件名作为字符串从任意souce.cpp文件调用函数

C++ 使用文件名作为字符串从任意souce.cpp文件调用函数,c++,function,macros,C++,Function,Macros,我正在网上处理编码问题,我想到了一个可以使测试真正高效的系统。我的计划是 为每个问题提供一个不同的.cpp文件,其中包含一个解决问题的函数,并将结果输出到.txt文件 创建一个.cpp文件,其main函数接受两个命令行参数:一个字符串(我当前正在解决的问题的文件名)和一个字符串(用于该问题的测试用例的文件名) main函数首先创建一个文件*来存储测试用例,然后创建另一个文件*来创建一个空输出文件。然后,它从命令行中指定的problem.cpp文件调用该函数 每个问题文件的函数原型如下所示: 静态

我正在网上处理编码问题,我想到了一个可以使测试真正高效的系统。我的计划是

  • 为每个问题提供一个不同的.cpp文件,其中包含一个解决问题的函数,并将结果输出到.txt文件
  • 创建一个.cpp文件,其main函数接受两个命令行参数:一个字符串(我当前正在解决的问题的文件名)和一个字符串(用于该问题的测试用例的文件名)
  • main函数首先创建一个文件*来存储测试用例,然后创建另一个文件*来创建一个空输出文件。然后,它从命令行中指定的problem.cpp文件调用该函数

    每个问题文件的函数原型如下所示:

    静态无效问题(文件*测试用例,文件*输出)

    其思想是将测试用例传递给一个特定的问题,并让“problem”函数将结果写入一个输出文本文件

    我成功地运行了针对特定问题的测试用例,并为每次运行获得了唯一的输出文件

    但是,我当前的问题是启用main函数将.cpp文件名用作参数。在C++中,没有直接使用文件名来从文件中调用函数的方法。我知道预处理器解析.cpp文件并将函数名转换为函数指针。有没有办法在运行时做到这一点?换句话说,我可以流式处理.cpp文件,搜索与我的函数原型匹配的行,并返回指向该函数的指针吗?是否有某种宏可以用来提示预处理器将文件名与其功能关联起来


    从我迄今为止对答案的搜索来看,最简单的解决方案似乎是创建一个映射,使函数名与函数匹配。这对我来说既乏味又不雅观。我想,每次切换问题时,我最好在主文件中手动更改函数调用,而不是在命令行中设置文件名。我也不想这样做您的文件可能有一个静态全局类。在其构造函数中传递函数地址。此构造函数更新可由主框架调用的函数的全局向量。如果需要输入和输出文件名,则将它们添加到构造函数的参数列表和向量中。

    实际上可以这样做,但这意味着将源代码编译到可加载库中,加载库,调用函数,然后保存结果。它涉及到在库中动态链接到要测试的整个应用程序,并管理安全问题,以便您不会打开可测试的应用程序遭受攻击。这是一个表面上看起来很简单,但层次越来越复杂的问题。如果你想继续学习的话,我建议你学习操作系统方面的课程。因为你的函数是静态的,它们不能直接从任何程序调用。即使它们被链接到。有,这将允许您创建您的测试用例作为“插件”与一个共同的接口。然后,这些测试用例插件可以由主应用程序动态加载。从外观上看,它看起来相当容易使用。也许可以作为直接调用LoadLibrary和GetProcAddress来缓解“脆弱性”问题的替代方法。