powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Чужая либа и std::queue, помогите конструктор копирования написать.
4 сообщений из 4, страница 1 из 1
Чужая либа и std::queue, помогите конструктор копирования написать.
    #39384371
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не силен в плюсах, подскажите как правильнее реализовать.

Делаю класс-обертку над сообщением ZeroMQ, надо сделать чтобы объекты можно было помещать в очередь.
Прописываю конструктор копирования:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
class my_t {
    zmq_msg_t msg;
public:
	my_t(const my_t& m) noexcept {
		int rc = zmq_msg_init(&msg); assert(rc == 0);
		rc = zmq_msg_copy(&msg, &m.msg);  assert(rc == 0);
	};
};


Получаю ошибку
Код: plaintext
1.
error C2664: 'int zmq_msg_copy(zmq_msg_t *,zmq_msg_t *)': cannot convert argument 2 from 'const zmq_msg_t *' to 'zmq_msg_t *'


понятно, потому что zmq_msg_copy() второй параметр не const.

В документации настоятельно рекомендуют не размножать zmq_msg_t простым копированием, а использовать zmq_msg_copy().
Что внутри zmq_msg_t вообще неизвестно
Код: plaintext
1.
typedef union zmq_msg_t {unsigned char _ [64]; void *p; } zmq_msg_t;



Непонятно как это все скрестить с наименьшими побочными эффектами.

Можно const в zmq.h дописать, так компилируется, но только правильно ли делать такой хак?
...
Рейтинг: 0 / 0
Чужая либа и std::queue, помогите конструктор копирования написать.
    #39384389
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

В данном случае, поскольку точно известно, что объекты zmq_msg_t - всегда динамически создаются и не могут являться физически константными, то достаточно просто обратно преобразовать указатель в неконстантный
Код: plaintext
1.
zmq_msg_copy(&msg, const_cast<zmq_msg_t *>(&m.msg))



А чужие хедеры править нельзя.
...
Рейтинг: 0 / 0
Чужая либа и std::queue, помогите конструктор копирования написать.
    #39384409
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, помогло.
...
Рейтинг: 0 / 0
Чужая либа и std::queue, помогите конструктор копирования написать.
    #39384498
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyА чужие хедеры править нельзя.
Я тоже так подумал, но другого способа не нашел, потому и написал.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Чужая либа и std::queue, помогите конструктор копирования написать.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]