Правильный способ создания подкласса / Lib в классе Singleton - PullRequest
0 голосов
/ 01 октября 2019

У меня есть рабочий пример, однако я не уверен, что делаю это правильно. Я использую Arduino Lib для обработки циклического буфера в этом случае, и я хотел бы обернуть его в класс Singleton в моем проекте, так как я буду взаимодействовать с классом во многих местах проекта.

Вот мой MRE:

main.cpp:

void loop() {
    Buffer *myBuffer = Buffer::getInstance();
    Ticker bufUpdate;
    bufUpdate.attach(1, [myBuffer](){ myBuffer->update(); });
    while (true) {
        yield();
    }
}

buffer.h:

class Buffer {
    private:
        // Singleton Declarations
        static Buffer *single;
        Buffer() {}
        // Other Declarations
        int randVal();
        void start();
        CircularBuffer<float, 400> samples;

    public:
        // Singleton Declarations
        static Buffer* getInstance();
        ~Buffer() {single = NULL;};
        // Other Declarations
        void update();
};

и buffer.cpp:

Buffer* Buffer::single = NULL;

Buffer* Buffer::getInstance() {
    if (!single) {
        single = new Buffer();
        single->start();
    }
    return single;
}

int Buffer::randVal() {
    return random(0, 254);
}

void Buffer::update() {
    int value = single->randVal();
    samples.push(value);

    // Do other stuff here ...
}

Это работает, как ожидалось, но я не уверен, что это правильно. Мой опыт в этом проекте пока что мои «корни» могут выглядеть хорошо, но позже я понимаю, что у меня был недостаток, поэтому я ищу помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...