如何在c++中从平面文件中调用函数名
How can I call function names from flat file in c++
我需要一个关于如何使用C++以及设计方法来完成以下工作的意见。
我正在尝试开发一个从平面文件中读取键值对的自动过程,其中value表示c++程序中已经定义的函数名。这是为了自动映射未来的产品密钥。
我正试图将键-函数名称作为映射存储在一个平面文件中,以避免任何代码更改。
这就是我到目前为止得到的。
平面文件内容:
CLO|LINK_CURRENT_BALANCE|getLinkBalance(double icm, double pip, string keyFld)
CLO|FORBER_CURRENT_BALANCE|getForberBalace(double icm, double pip, string keyFld)
C++代码示例:
std::map<std::string, std::function<int(double icm, double pip, string key)>> funcMap1 =
{
{"getLinkBalance", getLinkBalance},
{"getForberBalace", getForberBalace}
};
vector<string> fldV;
//read file until EOF reached
while(!infile.eof())
{
getline(infile, sLine);
fldV = split(sLine.c_str(), '|');
string prtType = fldV[0];//product
string fldTag = fldV[1]; //key fld
string stype = fldV[2]; //formula name
//std::cout << funcMap1[stype.c_str() ](icmop, pip, fldTag) << "n"; //not working
std::cout << funcMap1["getLinkBalance"](icmop, pip, fldTag) << "n";
}
infile.close();
std::cout << funcMap1[stype.c_str() ](icmop, pip, fldTag) << "n";
在最后一条语句中,stype
不起作用。我不得不对函数名进行硬编码。如何解决这个问题?
问题是,当对|
进行拆分时,会得到三个字符串:
"CLO"
"LINK_CURRENT_BALANCE"
"getLinkBalance(double icm, double pip, string keyFld)"
这显然不是你想要的。你需要取你得到的第三个字符串,找到左括号:
string stype = fldV[2]; //formula name
stype = stype.substr(0, stype.find("("));
这将为您提供正确的函数名称。
相关文章:
- 如何用参数值调用函数(仅在运行时已知)
- 从python中调用C++函数并获取返回值
- 当使用通配符和null指针调用函数时,对输出的说明
- 从R调用C++函数并对其进行集成时出错
- 使用QTreeView,如何通过调用函数只突出显示特定的行/列
- 如何在qt中从另一个类调用函数
- 在 COUT 语句中使用 COUT 调用函数
- 如何从线程中的不同模块调用函数?
- C++从函数指针数组调用函数
- 当 A 在 for 循环中调用函数 B 时,如何计算函数 A 的空间复杂度?
- 如何在 C/C++ 中从外部库调用函数
- 如何使用运算符在同一行中多次调用函数
- 是否可以创建一个从不同类调用函数的线程?
- 无法为类成员调用函数
- 如何从另一个标头 c++ 调用函数
- C++有什么方法可以在既不调用函数模板也不提供其模板参数的情况下引用函数模板?
- 如何只允许在调用函数 B 后调用函数 A?
- 我可以这样调用函数吗?
- 如何在 c++ 的类中递归调用函数方法?
- 为什么在指向对象的迭代器上调用函数不允许我更改对象本身?