Вопрос скорее по архитектуре, но всё же: есть базовый класс и наследники, каждый из которых имеет доступ к другим через защищённый метод GetDecendent. В одном из наследников (назвал его Derived3) в нескольких методах проверяется одно и то же условие (данные для проверки получаем из внешнего файла) - хочу проверять условие один раз, а код исполняемый после проверки вынести в Helper, проблемы возникают при попытке вынести код из метода Derived3::d3, в связи с тем, что там используется несколько вызовов GetDecendent. Делать Helper другом базового класса нельзя, вызвать GetDecendent и передать результаты можно, но реально они нужны только HelperHardCase-реализации, поэтому считаю это тоже плохим вариантом.
https://pastebin.com/Twmy1yzh