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