• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Перегрузка функций. Шаблонный клас. Прошу помощи.

p-a-h-a

Member
Здравствуйте. Создаю библиотеку для хранения практически любых типов данных в файле LittleFS включая STL контейнеры (std::vector, std::list, std::unordered_map и т.д.)
В связи с множественными типами переменных и контейнеров наплодилось много перегрузок методов, которые вызывают один и тот же метод. Прошу помощи в упрощении.
Файл библиотеки находится по ссылке.

Запись в файла примитивов (int, byte ...) обрабатывает метод:
Код:
  template <typename T>
  bool write(const T &data) const;
Все контейнеры STL записывает в файл метод:
C++:
  template <typename T>
  bool writeContainer(const T &container) const;
Но он выглядит так же как и для примитивов. Поэтому для каждого контейнера прописана перегрузка метода write, вызывающая метод writeContainer:
C++:
  template <typename T>
  bool write(const std::vector<T> &container);
  template <typename T>
  bool write(const std::list<T> &container);
  template <typename T>
  bool write(const std::deque<T> &container);
  template <typename T>
  bool write(const std::set<T> &container);//...........
Контейнеров много, это часть перегрузки метода принимающего их. Подобная ситуация и с чтением из файла.
Вопрос как избавиться от множества подобных перегрузок метода write?

Вопрос № 2. Поскольку клас "StorageManager" шаблонный, реализация всех методов описана в заголовочном файле h. Нужно ли делать отдельный cpp файл реализации или оставить все в хэдере? Если нужно, то как это делается с шаблонными класами, может подскажите пример стандартной библиотеки чтоб подсмотреть и где об этом почитать. Спасибо.
PS: делаю эту библиотеку т.к. хочу дальше изучать С++ и практикуюсь со стандартной библиотекой STL.
 

p-a-h-a

Member
Дополню: Хочу понять как можно отличить тип входящих данных и разделить его на контейнеры stl и все остальное.
 

p-a-h-a

Member
Изучил тему вопроса глубже. Все получилось. Собственно результат библиотеки, которая сохраняет в ФС любые типы данных включая STL контейнеры vector, map и т.д., отличает тип входящих данных (по методам в этих данных) и в зависимости от типа выполняет разные алгоритмы. Тут мне стоило почитать про "специализацию шаблона класса", и проверку имеет ли объект определенные методы.
Также отвечу на свой вопрос по реализации методов в шаблонном классе: Реализация методов делается в заголовочном файле. больше знать не нужно.

Собственно ссылка на результат: StorageManager.h и в целом на проект с примерами.
 
Сверху Снизу