Подскажите пожалуйста как можно решить проблемму
имееться class A в котором часть полей указатели на функции определенные в f.h
очень не хотелось бы что бы f.h пришлось включать во все файлы где используеться class A
есть идея вынести все указатели на функции в отдельный класс connector
но получаеться так что независимо от того будет ли A наследником connector или в классе A будет указатель на connector придеться включать f.h тк f.h будет использоваться для определения class connector значит и connector.h будет содержать include "f.h"
подскажите пожалуйста как можно скрыть содержимое f.h
Здравствуйте, sergey2b, Вы писали:
S>Подскажите пожалуйста как можно решить проблемму S>имееться class A в котором часть полей указатели на функции определенные в f.h S>очень не хотелось бы что бы f.h пришлось включать во все файлы где используеться class A
S>есть идея вынести все указатели на функции в отдельный класс connector S>но получаеться так что независимо от того будет ли A наследником connector или в классе A будет указатель на connector придеться включать f.h тк f.h будет использоваться для определения class connector значит и connector.h будет содержать include "f.h"
S>подскажите пожалуйста как можно скрыть содержимое f.h
Здравствуйте, sergey2b, Вы писали:
S>имееться class A в котором часть полей указатели на функции определенные в f.h
Поля — указатели на функции?
Для этого достаточно иметь тип функции, а не сама функция.
Причём, если этот тип включает только указатели и ссылки, то достаточно предобъявления (forward declaration) типов, на что ссылается/указывает.
То есть, возможно, можно изначально обойтись без f.h
S>очень не хотелось бы что бы f.h пришлось включать во все файлы где используеться class A
S>есть идея вынести все указатели на функции в отдельный класс connector S>но получаеться так что независимо от того будет ли A наследником connector или в классе A будет указатель на connector придеться включать f.h тк f.h будет использоваться для определения class connector значит и connector.h будет содержать include "f.h"
Можно сделать предобъявление класса коннектора, и держать указатель/ссылку на него.
Получим идиому pimpl.
С наследованием, понятное дело, такой фокус не пройдёт.
Сделать публично доступным A — как интерфэйс или абстрактный класс. И Сделать класс AImpl скажем который наследует от A но лежит полностью в бинарном виде. функция createA() (например) будет тоже полностью лежать в библиотеке и создавать объект класса AImpl но возвращать его как A.
Здравствуйте, LelicDsp, Вы писали:
LD>Сделать публично доступным A — как интерфэйс или абстрактный класс. И Сделать класс AImpl скажем который наследует от A но лежит полностью в бинарном виде. функция createA() (например) будет тоже полностью лежать в библиотеке и создавать объект класса AImpl но возвращать его как A.
Полностью присоединяюсь — опробовано в большом проекта, реально спасает от взаимной вермишели.
во все файлы где используеться class A надо будет включить a.h
выделенный интерфейс позволяет подменять реализации интерфейса без влияния на код клиентов
пляски вокруг странных енумов и указателей на функции можно совершать в файле connecting_a.cpp без какого-либо влияния на клиентов
зы: лично я идиому pimpl не использую, т.к. вижу в ней больше минусов, чем плюсов