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