Я получаю разные поля [потенциально одного класса] из двух разных источников на лету в c ++. Сначала поля класса A передаются в функцию # 1 (getData_Main), а затем вектор полей в другой локальной функции # 2 (getVecor_Sublass); Вызовы функций всегда последовательны # 1, а затем # 2. Вот упрощенные структуры данных:
class Subclass {
string str;
string str2;
//a few other fields
};
class Main {
string name;
float somevar;
// few more string fields
vector<Subclass> vecSubclass;
};
Мне нужно сохранить состояние данных, чтобы сделать его постоянным для использования в других интерфейсах, что-то вроде построения vector<Main*>
объекта-вектора. Я думал о создании переменной, которая служит в качестве индекса для основного класса и использовать тот же индекс в подклассе и сформировать своего рода таблицу поиска? Но как это сделать наилучшим и более эффективным способом?
К сожалению, я не очень хорошо знаком с современными функциями и конструкциями C ++ (11/14), все еще являюсь разработчиком C ++ 03), поэтому подумал о публикации здесь, чтобы получить некоторые предложения с некоторым рабочим фрагментом кода на случай, если лямбды или какие-либо более новые функции?
class Main
{
int index; //create from some static variable in function A and pass on to function B
string name;
float somevar;
vector<A> vecA;
};
Обновление (отвечая на комментарии)
Входные данные - поля данных , поступающие из java / jni нативные функции;
Требуемый вывод - это объекты vector<Main>
.
Проблема # 1: поля ввода одного класса java входят в две собственные функции, поэтому C ++ получение двух наборов полей (Набор # 1 - это все поля Main класса, а набор # 2 - vector<Subclass>
, содержащийся в полях класса Main
;).
Я просто пытаюсь восстановить объект и пробую разные варианты.
Поскольку они входят в локальные функции, нет ничего общего в том, чтобы перестраивать vector объекты, если мы не делаем что-то вроде создания индекса, который будет служить ключом, и создания векторных объектов в C ++ из этих двух источников. Проблема № 2 - как это сделать наилучшим образом.
Надеюсь, теперь вопрос имеет какой-то смысл?
Отредактировано, чтобы добавить следующий Java код, который мы пытаемся имитировать c функциональность:
public class MainLine {
String name;
String Locator;
Sub[] SubList = new Sub[5];
}
public class Test {
MainLine[] MainLineArray = new MainLine[10000];
// Data coming from some other sources in Java
for (int j=0;j<10000;j++){
test.addMainLine(MainLineArray[j].Locator, MainLineArray[j].name);
for (int k=0;k<5;k++) {
test.addSubList(MainLineArray[j].SubList[k].field1, MainLineArray[j].SubList[k].field2, MainLineArray[j].subList[k].field3,.....);
}
}
}