换句话说:如何将自定义类中的各种字段传递给单个函数?
现在详细说明:我有一个std::vector
包含一个类,例如CustomClass
,我必须通过一些标准从该类的字段中提取结果,这些标准是该类中的字段,并以某种方式组合这些数据。
我解决这个问题的第一种方法是使用一个函数,它接受std::vector
类的参数作为参数,以便提取数据并返回一个std:map
. 此映射中的键是应组合数据的标准的类型,值是int
来自该向量的所有成员的组合数据。
问题是标准不仅仅是一个 - 此类中的多个字段可以用作标准(为方便起见,所有标准都是std::string
,如果不是 - 我可以使函数模板化)。
现在对我来说最简单的方法是用几乎相同的代码制作几十个函数,每个函数都从这个类中提取一个简单的具体字段。但是,更改可能需要对所有数十个功能进行类似更改,这将是一个令人头疼的维护问题。但是在这个阶段,我想不出如何将这个类中的一个字段传递给一个函数......
这是该类的示例代码:
// this is the class with data and criteria
class CustomClass
{
public:
std::string criteria1;
std::string criteria2;
std::string criteria3;
//... and others criteria
int dataToBeCombined;
// other code
};
// this is one of these functions
std::map<std::string, int> getDataByCriteria1(std::vector<CustomClass> aVector)
{
std::map<std::string, int> result;
foreach(CustomClass anObject in aVector)
{
if(result.find(anObject.criteria1)==result.end()) // if such of key doesn't exists
{
result.insert(std::make_pair(anObject.criteria1, anObject.dataToBeCombined));
}
else
{
// do some other stuff in order to combine data
}
}
return result;
}
并且通过类似的方式,我应该制作应该与CustomClass::criteria2
,CustomClass::criteria3
等一起使用的其他功能。
我想将这些标准放在一个数组中,并仅将标准的数量传递给该函数,但该类将被其他人用于其他目的,并且字段必须易于阅读,因此这不是一个选项(即真实姓名不是criteria1
,criteria2
等,而是描述性的)。
有想法的人吗?
编辑:有人将我的问题提到“具有不同返回类型的 C++ 相同函数参数”,这显然是非常不同的——在我的例子中,函数每次都返回相同的类型,只是它所采用的参数必须是一个类的各个字段。