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

时间:2012-06-18 10:32:44

标签: c++ function

我的项目中有一个已实现的函数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个孩子之一的信息。

3 个答案:

答案 0 :(得分:3)

你不能一般在C ++中执行其源包含在字符串中的代码。可能最令人信服的动机是,在运行代码的机器上不需要C ++编译器,尽管它不仅仅是那个。

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

特定于平台,例如:

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

特定于输入,例如:

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

听起来好像在你的任务中你有一个字符串是:

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

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

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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