我需要就如何使用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
不起作用。我不得不对函数名称进行硬编码。怎么解决这个问题?
答案 0 :(得分:0)
问题在于,当您对|
进行拆分时,会得到三个字符串:
"CLO"
"LINK_CURRENT_BALANCE"
"getLinkBalance(double icm, double pip, string keyFld)"
这显然不是你想要的。您需要获取第三个字符串并找到左括号:
string stype = fldV[2]; //formula name
stype = stype.substr(0, stype.find("("));
这应该为您提供正确的功能名称。