Я нуждался в такого рода вещах для системы сетевых коммуникаций в многопоточной среде.
В моем случае я просто обернул std :: queue объектом, который обрабатывал блокировку (std :: queue, вообще говоря, не является потокобезопасным). Объекты в очереди были просто очень легкими обертками над массивами в стиле char *.
Эти оболочки также предоставили следующие функции-члены, которые я считаю чрезвычайно полезными.
insertByte(unsigned int location, char value)
insertWord(unsigned int location, int value)
insertLong(unsigned int location, long value)
getByte/Word/Long(unsigned int location)
Они были особенно полезны в этом контексте, так как слово и длинные значения должны были быть заменены байтами, и я мог бы выделить эту проблему для класса, который фактически обработал ее в конце.
Были некоторые немного странные вещи, которые мы делали с кусками двоичных данных размером более 4 байтов, что, как я думал в то время, помешало бы нам использовать std :: vector, хотя в эти дни я просто использовал его и поэкспериментируйте с & vector [x].