5

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

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

那么标准函数呢,例如,我怎么能称之为time()have std::string "time()"


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

4

3 回答 3

3

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

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

特定于平台的,例如:

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

输入特定,例如:

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

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

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

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

于 2012-06-18T10:44:30.900 回答
1

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

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

于 2012-06-18T11:38:58.283 回答
0

你不能用 C++ 做到这一点。

于 2012-06-18T10:34:35.973 回答