使用C++中的参数将std :: string转换为现有函数

Ser*_*iev 5 c++ function

MyFunc(int, double, string)我的项目中有一个已实现的功能.例如,如何使用具有其字符串表示的必要参数来调用此函数

std::string str = "MyFunc(2, 3.12, \"Lemon Juice\")";
Run Code Online (Sandbox Code Playgroud)

并且怎么样的标准功能,例如,我怎么能调用time()std::string "time()"


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

Ste*_*sop 3

通常,您不能在 C++ 中执行其源代码包含在字符串中的代码。也许最引人注目的动机是 C++ 实现不需要在代码运行的机器上有 C++ 编译器,尽管它的意义远不止于此。

您也许可以针对特定情况执行此操作。那可能是:

特定于平台的,例如:

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

输入特定,例如:

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

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

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

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