使用仿函数摆脱IF语句

时间:2015-03-07 02:09:46

标签: c++ if-statement functor

请教我如何在以下循环中使用仿函数(或任何其他更好的方法)来删除那些if语句:

//Loop over each atom
std::string temp_name ; 
float dst;
for (pdb::pdb_vector:: size_type i=0; i < data.size(); ++i)
{

    if (type == 0) 
    {
        //choose by residue name
        temp_name = data[i].residue_name;
    } else {
        //choose by atom name
        temp_name = data[i].atom_name;
    }
    //compare the name and extract position if matched
    if (temp_name.compare(name) == 0) 
    {
        if (direction.compare("x") == 0)
        {
            dst = ::atof(data[i].x_coord.c_str());              
        } else if ((direction.compare("y") == 0)) {
            dst = ::atof(data[i].y_coord.c_str());                  
        } else {                
            dst = ::atof(data[i].z_coord.c_str());  
        }

    }
}

1 个答案:

答案 0 :(得分:0)

您可以使用三元运算符替换if(type == 0)

// if(type == 0) ...
temp_name = (type == 0 ? data[i].residue_name : data[i].atom_name);

但是如果你尝试了类似的东西,那么你的其他支票似乎只会变得不那么可读。