Я работаю над проектом с использованием программирования на основе интерфейса. Первая часть этого - для контекста на случай, если кто-то скажет, что я делаю что-то совершенно неправильное или имеет другой подход, который исправляет мою проблему.Функциональный указатель на функцию класса интерфейса в конструкторе дочернего класса
У меня есть класс контейнера, который включает в себя несколько абстрактных классов интерфейса. Они определяют функции, которые возвращают нужные мне данные.
Этот контейнерный класс содержит вектор частей, которые не знают о классе контейнера и поэтому не содержат заголовки интерфейса.
Каждая деталь является объектом того же типа. При создании этих объектов он передает указатель на функцию в качестве аргумента конструктору дочерних объектов. Этот аргумент является указателем на функцию, определенную в одном из классов интерфейса.
Я пытаюсь передать указатель, используя &iTheInterfaceClass::theDataFunction
конструктору, ожидающему U16(*pDataFunction)()
.
Это приводит к ошибке cannot convert 'U16 (iTheInterfaceClass::*)() {aka short unsigned int (iTheInterfaceClass::*)()}' to 'U16 (*)() {aka short unsigned int (*)()}' in initialization
Если части включают .h файл, я могу получить эту работу, так как я просто соответствовать прототипу включать пространство имен в конструкторе. Однако это нарушает мою абстракцию. Если каждая часть включает в себя другой интерфейс, я должен создавать отдельные классы для каждого, даже если функциональность идентична.
В любом случае, чтобы прототипы совпали без полной корректировки моей стратегии здесь?
Вам нужно будет сделать статическую функцию 'theDataFunction'. Но использование указателей функций с объектами «плохо пахнет». –
Вам не повезло. Функция-член нуждается в дополнительном параметре для 'this'. –
@MatsPetersson Если единственное, что отличается между объектами, это вызов функции (расположение данных) в общем интерфейсе, почему, в частности, это «плохо пахнет»? –