Хранение разных типов источников сообщения в одном объекте

Есть две функции приема сообщений, одна принимает данные по сети, вторая из библиотеки. В первом случае в качестве источника указывается ip:порт, во втором - идентификатор библиотеки. Источник нужно хранить какое-то время чтобы можно было отправлять ответные сообщения. Как можно реализовать хранение разных типов источников? На ум приходят следующие варианты :

  1. Для каждого типа источника завести отдельный контейнер и при отправке сообщения обращаться к определенному контейнеру. (хотелось бы все-таки иметь один контейнер)
  2. Хранить источник в виде 8-байтной переменной: в случае приема из сети в старшие 4 байта писать ip, в младшие - порт, при приеме из библиотеки просто записывать идентификатор. (не особо нравится данный вариант)
  3. Завести структуру из 3 полей struct sSource { std:string ip; uint16_t port; uint32_t idLibrary; }; и обращаться либо к полю идентификатор либо к полям ip:порт. (тоже не очень нравится такой вариант)

Подскажите как сделать правильнее?


Ответы (0 шт):