В некоторых словах: как передать различные поля из пользовательского класса в одну функцию?Как передать поля из класса функции в C++?
Теперь в деталях: У меня есть 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
и т. Д., Но являются описательными).
Кто-нибудь имеет идеи?
EDIT: Кто-то передал мой вопрос «C++ с теми же параметрами функции с другим типом возврата», который, очевидно, очень отличается - функция в моем случае возвращает каждый раз каждый раз, только требуемые параметры должны быть разными полями из класс.
Этот вопрос полон слова, которые являются допустимыми словами на английском языке, но в сочетании таким образом, что не имеет смысла. «У меня есть std :: vector из класса». «этот вектор проходит через». «в качестве критериев можно использовать более одного поля этого класса». Этот вопрос нужно переписать так, чтобы он был более ясным и, вероятно, половиной его текущего размера. –
«Вот пример кода из этого класса:« явно не потому, что 'foreach (CustomClass anObject в aVector)' не является C++. Кроме того, извините, но этот пост - салат из слова. Пожалуйста, объясните, шаг за шагом, используя короткие параграфы/маркеры, то, что вы пытаетесь сделать - желательно со специфическими ссылками на части вашего кода, которые должны быть фактически C++, должны присутствовать полностью и должны показывать пример ввода и желаемых выходных данных. –
Возможный дубликат [C++ одинаковых параметров функции с другим типом возврата] (http://stackoverflow.com/questions/14840173/c-same-function-parameters-with-different-return-type) –