Реализация Push_back для (гетерогенного) набора векторов - PullRequest
2 голосов
/ 20 октября 2019

Скажем, у меня есть структура (или класс), как показано ниже:

struct _particle {
std::vector<float> vx , vy;
std::vector<int> id;
std::vector<double> rx, ry;
};
typedef struct _particle particle;
particle p;

Это структура массивов (векторов). Теперь я хочу отправить туда одну частицу с данными значениями vx, vy, id, rx, ry. Наивно, я бы применил push_back к каждому из векторов в объекте частицы p.

p.vx.push_back(vx_val); p.vy.push_back(vy_val); ... 

Но это означает, что любой разработчик, желающий добавить новое поле (новый вектор), должен будетвручную добавляйте вызов push_back каждый раз, когда необходимо добавить новые данные частиц.

Можно ли реализовать push_back таким образом, чтобы он перебирал все элементы в структуре particle и добавлял к хвосту векторов?

Единственный способ решить эту проблему - создать список ссылок на векторы в структуре particle. Но это больше похоже на C и может быть не в стиле C ++. Есть ли стандартный / аккуратный способ добиться этого?

1 Ответ

0 голосов
/ 21 октября 2019

Что бы вы ни пытались, вы должны отслеживать имена членов и их типы. Таким образом, у вас не может быть метода, который все автоматически добавит push_back к новому члену.

Небольшой простой способ, который я могу придумать, - сохранить указатель на члены в кортеже и использовать функцию с параметром. упаковать, чтобы пройти через указатели и отодвинуть все назад. Это сохранит push_back, но вам все равно нужно добавлять новые указатели в кортеж при добавлении новых членов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...