URBI — UObject — обёртка UObject



Посмотрев пример Urbi-драйвера для управления сервомашинкой через Arduino можно заметить, что такое смешение кода — не лучший стиль программирования.
Для того чтобы избегать такого «смешения французского с нижегородским», UObject можно использовать в виде обёртки вокруг нашего класса управления(причём последний вообще может оставаться без изменений).

Пример:

#include <urbi/uobject.hh>
using namespace urbi;
using std::string;

// класс, который мы хотим использовать без модификации
class MyClass
{
public:
    int func1(const string &s){return 0;}
};

// UObject - класс-обёртка вокруг MyClass
class WrapClass: public UObject, MyClass
{
  public:
  WrapClass(const std::string& s): UObject(s)
  {
    // конструктор urbiScript
    UBindFunction(WrapClass, init);
    // доступ к интересующей нас функции
    UBindFunction(MyClass, func1);
  }
  int init()
  {
    return 0;
  }
};

UStart(WrapClass);

Теперь в urbiScript можно вызвать эту функцию:

var c = WrapClass.new;
c.func1("foo");

именно такой приём я использовал при написании модуля UrbiDuino:
есть класс ArduinoFirmata для общения с Arduino по протоколу Firmata и класс-обёртка Arduino:

class Arduino: public urbi::UObject, ArduinoFirmata

в котором просто реализован конструктор (открытие порта) и прописаны UBindFunction() для всех необходимых функций.


Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна конкурс манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение