Нормальный подход - сделать свой модуль с Send - Recv нужных типов. Под него зафигачить CommStreams.

Понадобится оптимизировать - заменить реализацию.

Всегда надо найти способ отложить оптимизации и усложнения на потом. Главное, чтобы оптимизации оставались всегда возможными. (Впрочем, обратное обычно получается вследствие нарушения "разделяй и властвуй". Вот в .NET/Java не разделили ООП и динамическую память - и хоть ап стену убейся...)