有没有更好的方法来做到这一点
auto commodityOneLeg = boost::bind(&VegaFactory::load_commodity_one_leg,this,conn,_1);
std::map<std::string,decltype(commodityOneLeg)> methods;
methods.insert(std::make_pair("COMMODITYONELEG",commodityOneLeg));
methods.insert(std::make_pair("FXOPTION",boost::bind(&VegaFactory::load_fx_index,this,conn,_1)));
methods.insert(std::make_pair("FXBARROPT",boost::bind(&VegaFactory::load_fx_bar_opt,this,conn,_1)));
methods.insert(std::make_pair("COMMODITYINDEX",boost::bind(&VegaFactory::load_fx_index,this,conn,_1)));
auto f = methods.find(trade_table);
if(f != methods.end()) {
fx_opt = (f->second)(t_id);
}
有没有一种方法可以声明 std:map<> 的类型而不必在前一行先声明映射?我想我的意思是美学 - 代码应该看起来很整洁吧?
当输入是“交易类型”字符串时,是否有一种更简洁/更简单的方法来执行此 c++ 字符串 switch 语句。
编辑
进一步澄清。我可以手动写出 boost:bind 类型的类型,但这似乎太过分了。这可能是一个很好的例子,说明 auto 和 decltype 可以用来简化代码。但是,必须以一种方式在地图中声明一个条目,而以另一种方式声明其他条目看起来是错误的;这就是我想要解决的问题