Size: a a a

cxx.Дискуссионная

2020 August 17

BB

Bohdan Bessonov in cxx.Дискуссионная
Дело в том, что один класс унаследованный от HFModule может у класса HFApp запрашивать указатель на другой класс, так же унаследованный от HFModule, но представляющий другую .dll
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
Щас дам ссылку на гитхаб
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
Смотреть в папке Common файлы HFModule и HFPlugin
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
Важно: выбрать бранч Develop
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
Примеры того как модули работают есть в папке Module, желательно смотреть в ModuleTestA
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
В общем, нужно переписывать этот HFModule и HFDynLib
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
Но не могу придумать, как это реализовать
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
Кто готов помочь - напишите в лс, я расскажу поподробнее, можно в голос пойти
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
ModuleA может через HFApp запросить указатель на класс ModuleB
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
Проблема в том, что ModuleA класс видит AddPlugin/GetPlugin методы, когда юзает указатель ModuleB после того как он получил его у HFApp
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
Эти методы видны, но их опасно использовать грубо говоря и я хочу их скрыть
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
Но если я их скрываю, то умирают плагины внутри HFModule, потому что после занесения методов Add/Get Plugin в протектед поле, плагины не могут теперь у своего же класса родительского (модуля) запросить другие плагины из того же родительского модуля
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
Нужно как то иметь возможность делать Add/Get Plugin protected, но при этом чтоб плагины самого этого класса модуля могли эти методы юзать
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
Чтоб ModuleA не мог видеть эти методы, когда будет обращаться по указателю на объект класса от ModuleB
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
AddPlugin(..., HFAppPassKey{});

Всё, никто, кроме HFApp не вызовет метод AddPlugin(). Впрочем, тут бы тебе и просто friend помог, наверное
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
Грубо говоря, методы Add/GetPlugin должны быть видны только ниже по иерархий от классов ModuleA/ModuleB и других модулей
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
Проблема в том, что плагины наследуются от HFPlugin, я пытался сделать HFPlugin класс дружественным по отношению к HFModule, но он говорит что его друг HFPlugin, а не унаследованные от него классы
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
И все, фиаско
источник

BB

Bohdan Bessonov in cxx.Дискуссионная
То есть, протектед методы вызвать он все равно не может, потому что он не друг HFModule классу, только его базовый класс является его другом
источник