Q1.
Нет общего совета, чтобы избежать наследования реализации.Люди делают это постоянно.
С другой стороны, MFC является ярким примером дизайна Just Bad ™ C ++.Это связано с тем, что (1) она очень старая и предварительно стандартная, (2) представляет собой упрощенную версию более похожей на C ++ библиотеки AFX (насколько я помню), которая в то время оказалась слишком «сложной» для программистов.
Итак, подводя итог, ваш Q1 поднимает "ложную дихотомию": нет никакого противоречия между наследованием реализации в порядке, Microsoft ошибочно, MFC является примером в целом плохого дизайна, и любым качеством, которое CListBox
has.
Q2.
По сути, вопрос перефразируется: «Это хорошая идея для генерации общего кода для классов с использованием макросов генерации кода?».
Ответ на этот вопрос - нет, как правило, это не очень хорошая идея.
Это абсолютно зло.Хотя это зло может быть наименьшим злом в некоторых случаях, например, при реализации clone
, но мы говорим о макросе, выполняющем что-то, что не поддерживается в C ++, а именно общековариантную реализациюфункция-член.Тем не менее, это настолько хороший момент, что большинство жителей SO не понимают этого (я знаю, потому что я поднял это в одном ответе на вопрос, и это было сильно понижено), поэтому я, возможно, не должен поднимать его - достаточно сказать, чтов общем, эй, это зло.
Итак, вы знаете, что вы должны не делать.
Но что касается хорошей альтернативы, хорошо, это зависит отcontext.
И ваш контекст слишком смутно очерчен, чтобы давать какие-либо действительно полезные советы по этому поводу.
Cheers & hth.,