我的项目中有一个已实现的函数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
个孩子之一的信息。
答案 0 :(得分:3)
你不能一般在C ++中执行其源包含在字符串中的代码。可能最令人信服的动机是,在运行代码的机器上不需要C ++编译器,尽管它不仅仅是那个。
您可以针对特定情况执行此操作。那可能是:
特定于平台,例如:
特定于输入,例如:
听起来好像在你的任务中你有一个字符串是:
int
double
你没有说你想用这个字符串做什么,但是你可能需要(a)检查字符串以找出它中的哪一个,然后(b)做一些适当的事情。那种格式。更好的是,无论三个GetValue()
中的哪一个返回,您都可以赋予派生类返回相同表示的责任。例如,如果您真正想要的是自1970年以来的秒数,请添加GetSecondsSinceEpoc
函数,并在每个类中以不同方式实现它。
答案 1 :(得分:1)
正如其他人所说,C ++本身无法做到这一点。但是外部框架可以帮助您。
ROOT(在CERN中使用)为C ++和解释器提供反射。您将能够在代码中执行/解释方法调用或用C ++编写的宏。
答案 2 :(得分:0)
你不能用C ++做到这一点。