将 std::string 转换为具有 C++ 参数的现有函数

Convert std::string to existing function with parameters in C++

本文关键字:C++ 参数 函数 std string 转换      更新时间:2023-10-16

我的项目中有一个实现的函数MyFunc(int, double, string)。如何使用具有字符串表示形式的必要参数调用此函数,例如

std::string str = "MyFunc(2, 3.12, "Lemon Juice")";

那么标准函数呢,例如,我如何调用time()具有std::string "time()"


好的,这是更详细的任务。我有map <string, Data> Data是一个有很多孩子的班级包装者。当我调用Data.GetValue()方法时,它会返回一个std::string,具体取决于子类内部数据。Data子项中的一个必须返回 int 的字符串表示形式,另一个子项 - double 的字符串表示形式,最后一个子项返回当前日期和时间的字符串表示形式。这就是问题所在 - 我不知道如何调用标准函数ctime()Data孩子之一获取信息。

通常不能在源包含在字符串中的C++中执行代码。这样做最引人注目的动机可能是,C++实现不需要在运行代码的机器上有一个C++编译器,尽管它不止于此。

对于特定情况,您也许可以这样做。这可能是:

特定于平台,例如:

  • 将源代码包装在某个样板中,然后在外部调用编译器,链接到它,或将其嵌入到程序中。这为您提供了一个程序或库。
  • 在外部运行该新程序,或动态链接到该库。

特定于输入,例如:

  • 您可以相对轻松地将函数调用解析为特定的已知函数,使用文本作为参数,而无需完整的C++编译器。将参数值提取到变量中并调用函数。但是,如果要这样做,可以为字符串指定一种更容易解析的格式,而不是看起来像C++函数调用的格式。

听起来好像在您的任务中,您有一个字符串,它是以下字符串之一:

  • int的表示
  • 形式
  • double的表示
  • 形式
  • 日期和时间的表示形式。

你没有说你想用这个字符串做什么,但不管是什么,你可能需要(a)检查字符串以找出它是三个中的哪一个,然后(b)做一些适合该格式的事情。更好的是,您可以赋予派生类返回相同表示法的责任,无论三个GetValue()中的哪一个返回。例如,如果您真正想要的是自 1970 年以来的秒数,请添加一个 GetSecondsSinceEpoc 函数,并在每个类中以不同的方式实现它。

正如其他人提到的,C++本身无法做到这一点。但是,外部框架可以为您提供帮助。

ROOT(在CERN使用)与解释器一起为C++提供反射。您将能够从代码中执行/解释方法调用或用C++编写的宏。

你不能

使用C++来做到这一点。