如何在c++中从平面文件中调用函数名

How can I call function names from flat file in c++

本文关键字:调用 函数 平面文件 c++      更新时间:2023-10-16

我需要一个关于如何使用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("("));

这将为您提供正确的函数名称。