Есть, предположим, вот такой вот набор синтетических конструкций:
#include <cstdint>
#include <deque>
#include <algorithm>
struct Point;
struct Additional;
struct Track
{
uint64_t id;
std::deque<Point> points;
void appendNewPoint(int x, int y, Additional additional);
};
struct Additional
{
int dx;
int dy;
};
struct Point
{
Additional additional_data;
int x;
int y;
uint64_t id;
Track * parent;
Point * next();
Point * prev();
};
Point * Point::next()
{
auto& container = parent->points;
auto result = std::find_if(container.begin(), container.end() - 1, [this](Point& n) {
return this == &n;
});
return (result == container.end() - 1 ) ? this : &(*(result + 1));
}
Point * Point::prev()
{
auto& container = parent->points;
auto result = std::find_if(container.rbegin(), container.rend() - 1, [this](Point& n) {
return this == &n;
});
return (result == container.rend() - 1 ) ? this : &(*(result + 1));
}
void Track::appendNewPoint(int x, int y, Additional additional)
{
Point point = {additional, x, y, this->points.size(), this};
this->points.push_back(point);
}
Допустим, у меня есть некоторый контейнер, который хранит данные типа Track:
std::unordered_map<uint64_t, Track> Tracks;
Вопрос:
Как мне передать это по UDP пользуясь unix сокетами?
Я так понимаю, это все ведь можно представить как набор данных, представить его как
void *
выделить под данные пол мегабайта, и отправить это все дело на сервер, а на сервере полученные данные скастовать обратно в
std::unordered_map <uint64_t, Track>
или нельзя так делать? Если нельзя, то как можно?
P.S.: Методы структур представлены в ознакомительных целях, чтобы показать, что структуры, которые я собираюсь передать также имеют некоторые методы, механика которых не сильно (но все-таки) отличается от приведенных здесь.