@Vadimatorikda
Инженер-программист, embedded разработчик

Как использовать const объект в разных файлах cpp без копирования (C++14)?

Имеется базовый абстрактный класс:
class spi_base {
public:
    virtual int tx ( параметры ) const = 0;
    virtual int rx ( параметры ) const = 0;
    virtual ~spi_base() {}
};

Он является базовым для шаблона класса с constexpr конструктором (для гарантии того, что тело конструктора не будет содержать инструкций реального времени выполнения), private константами и mutable переменными (понятное дело, что объект такого класса пойдет в RAM). Все методы шаблона данного класса помечены как const.
template < параметры_шаблона >        
class spi_master_hardware_os : public spi_base {
public:
    constexpr spi_master_hardware_os ( void );

    int     reinit                  ( void ) const;
    int     tx                      ( параметры ) const;

private:
    void    on                      ( void ) const;
    void    off                     ( void ) const;

    mutable bool handler_tx_point_inc_cfg_flag = false;
    ...некоторое_количество_mutable_переменных...
    mutable uint32_t number_items = 0;

    const spi_cfg< параметры_шаблона > cfg;
};

В коде пользователя объект данного класса создается следующим образом (в файле .cpp):
const spi_master_hardware_os< параметры_шаблона > spi1;

Вопрос в следующем. Как можно объявить const объект шаблонного класса так, чтобы в разных CPP файлах был использован один и тот же объект?
Поясню. Если я объявлю (точно таким же образом) данный объект в .h файле и буду использовать его методы в двух разных .cpp (в которых есть include этого .h файла) то каждый CPP файл работает со своей копией этого объекта (что мне совершенно не нужно).
  • Вопрос задан
  • 287 просмотров
Решения вопроса 1
@alex-t
Прогр. в команде rco.ru
Тут вопрос, когда этот объект создается.
Если до старта main(), и опять-таки до старта main никем не используется, то часто достатлчно простого extern.
Если не совсем так, то начинайте "окучивать" синглтон...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы