Я немного новичок в написании на С, так что я надеюсь, что не далеко отсюда.
Я работаю над библиотекой для управления несколькими типами светодиодных ИС. Существует множество различных типов библиотек RGB Pixel, каждая из которых имеет собственное уникальное имя, но в действительности все выполняет одни и те же основные действия. Создается объект «strip» или «strand», каждый пиксель получает набор значений цвета, а затем полоса обновляется.
Моя библиотека обрабатывает получение значений цвета пикселей из программного обеспечения на заднем плане и предоставляет пользователю самые последние значения из массива, принадлежащего объекту.
Я хотел бы, чтобы пользователь мог инициировать свой объект светодиодной ленты и передать ссылку на этот объект в мою библиотеку, а затем разрешить ему передавать свои объекты «setPixelColor ()» и функцию «UpdateStrip ()» в библиотеку. также. Если это достижимо, то я считаю, что моя библиотека сможет обрабатывать все операции управления освещением для любой заданной PixelLibrary.
Я считаю, что я ищу правильный способ передать указатель на функцию между объектами? Не ищу кого-то, кто мог бы сделать это для меня, а просто ищет руководства. Я искал в Google какое-то время этим утром, но я не знаю, что я даже использую правильные термины. Любой совет или руководство будет большой помощью. Спасибо!
Похоже, вам нужен базовый класс или виртуальная база / интерфейс. Вы определяете класс с общими данными и методами, которые работают на всех ваших светодиодах. Этот общий или абстрактный класс определяет общие функции. Каждый из ваших типов цепей светодиодов будет наследовать базовый класс / интерфейс и реализовывать специальные функции, например, для установки светодиодов.
Используя этот подход, код приложения работает с использованием методов базового класса / интерфейса, обрабатывая все ветви одинаково.
Если вы используете этот подход, я также рекомендую вам создать метод статической фабрики, который возвращает указатель базового класса / интерфейса после создания специально требуемого объекта.
abstractController = CreateLEDStrandController («Strand Type»); // Создает правильный объект, возвращает абстрагированный указатель базового класса.
abstractController.SetLEDColor ( «красный»); // На самом деле вызывает конкретный объект SetLEDColor
Других решений пока нет …