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

时间:2015-04-11 16:52:09

标签: 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不起作用。我不得不对函数名称进行硬编码。怎么解决这个问题?

1 个答案:

答案 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("("));

这应该为您提供正确的功能名称。