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

Делаю класс-обертку над сообщением 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
13.01.2017, 17:14
    #39384389
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чужая либа и std::queue, помогите конструктор копирования написать.
Dima T,

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



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


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