Я обычно использую тот же шаблон для своего пользовательского интерфейса в C # Winforms.
Вы на самом деле здесь не делаете множественное наследование. Один из классов, от которого вы наследуете, - это просто пустой интерфейс. Единственная проблема здесь в том, что C ++ не знает разницы между классом и интерфейсом.
Я не думаю, что есть проблема с созданием докладчика внутри представления, как это. Это не самый тестируемый дизайн, но вы все равно не собираетесь тестировать представление, потому что там нечего тестировать, если вы используете скромный диалог. Или вы можете сделать «DI бедняка», добавив второй конструктор, который внедряет презентатора вместо того, чтобы создавать его для целей тестирования.
В C # у меня обычно есть представления, которые вообще не знают о докладчике, и я просто генерирую события вместо вызова докладчика. Это добавляет некоторую развязку, но в большинстве ситуаций может быть излишним.
В целом, это хорошая реализация. Если мне когда-нибудь придется написать приложение на C ++ с пользовательским интерфейсом, я собираюсь проверить этот пост