Здравствуйте, agaf, Вы писали:
A>Мне бы хотелось реализовать именно вариант с виртуальным наследованием. Правда, нет уверенности, что это возможно в рамках С++.
A>В случае шаблонов непонятно, кто будет реализовывать чисто виртуальный метод IPort::func(), если от IPort никто не наследуется.
У тебя просто не откомпилится

IPort — абстрактный класс, если у его наследника не переопределить все его чисто виртуальные функции — не удасца создать объект.
А виртуальное наследование — действительно плохое решение.