将 std::string 转换为具有 C++ 参数的现有函数
Convert std::string to existing function with parameters in C++
我的项目中有一个实现的函数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++来做到这一点。
- 如何反转整数参数包
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 如何使用默认参数等选择模板专业化
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 函数调用中参数的顺序重要吗
- 部分定义/别名模板模板参数
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 使用不带参数的函数访问结构元素
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- 如何在OMNET++中指定与命令行参数组合的输出文件名
- 如何使用Luacneneneba API正确读取字符串和表参数
- 在派生函数中指定void*参数
- 视图中的参数推导失败:take_while
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 使用指向成员的指针将成员函数作为参数传递
- 没有名称的C++模板参数
- 如何将enable-if与模板参数和参数包一起使用