SFML и C++ Уроки \ Разработка игр › Форумы › SFML Network › Передача обьекта класса по сети › Ответ в теме: Передача обьекта класса по сети
mypmyp, в данном случае следует поступать точно также как и в случае, если мы хотим передавать в STL потоки свои классы, а именно нужно перегрузить операторы помещения и изъятия из потока данных (На самом деле скорее оператор побитового сдвига, но кто мы такие чтобы спорить с создателями STL? =D)
И так что нам нужно чтобы все это приготовить?
Ну что же начнем с класса который мы собираемся передавать в пакет. В качестве подопытного возьмем какой нибудь простенький класс
1 2 3 4 5 6 7 8 9 10 11 12 13 |
class SimpleClass { int _x,_y; public: SimpleClass(): _x(0), _y(0) {} SimpleClass(int x, int y): _x(x), _y(y) {} int x() const; void setX(int x); int y() const; void setY(int y); }; |
Дальше самое вкусное: перегрузим для него наши операторы:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
sf::Packet& operator << (sf::Packet &packet, const SimpleClass &yourClass) { return packet << yourClass.x() << yourClass.y(); } sf::Packet& operator >> (sf::Packet &packet, SimpleClass &yourClass) { int x,y; packet >> x >> y; yourClass.setX(x); yourClass.setY(y); return packet; } |
Вся магия до не возможности проста: мы просто поочередно запихиваем все поля класса в пакет, поскольку перегрузка данной функции для отдельных полей класса у нас есть (в нашем случае для int). В случае если ваш класс содержит другие классы, то нужно перегрузить данные методы и для этих классов.
Распаковка пакета происходит точно также, как и упаковка за исключением смены оператора левого побитового сдвига на правый. © Кэп
Что же и осталось последнее – это посмотреть как это все будет использоваться.
1 2 3 4 5 6 |
sf::Packet packet; SimpleClass yourClass; packet << yourClass; ... packet >> yourClass; |
Как видно использование ни чем не отличается от стандартных типов данных.
P.s.: спасибо, что терпели очередной выпуск программной кулинарии от RazorNd