EdgeAligned 53 19 февраля Опубликовано 19 февраля · Жалоба Я вот что имел ввиду. Тут есть несколько подходов, чтобы не таскать переменные через extern. Эт еще со времён обычного Си усвоил - нехорошая практика с extern, за исключением редких случаев. Для С++ классы представляют собой набор функций и набор переменных. И все они, которые описаны внутри класса, доступны для всех функций класса. Методы класса можно выносить за пределы класса и помещать их как показано на скрине. Единственная засада тут - проблемы с шаблонами самого класса. Но это косяк языка С++. Еще существует наследование классов - способ "укрупнения", когда один класс "собирает" в себя другие классы. С наследованиями есть некоторые хитрые штуки типа переопределения виртуальных методов, но это уже тонкости, познаваемые в процессе изучения языка. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
remontsofta 1 19 февраля Опубликовано 19 февраля · Жалоба Как этим пользоваться? Учитывая, что где-то в коде до этого мне нужно определить, будет это <int> или <myStruct> или и то и другое. Я хочу просто в итоге из main.cpp и из test.cpp иметь доступ к методам ee. Другими словами я просто хочу писать ee.commit(); ee.begin(); и тд Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
EdgeAligned 53 19 февраля Опубликовано 19 февраля · Жалоба Только вопрос - а так уж прям и нужно в main() это делать? Быть может, чтение-запись чего-то в еепром делать именно там, где располагается этот функционал? То есть, непосредственно по месту применения. Но, допустим, хотите из main. Ладно. Объект ее1 (либо указатель/ссылку на него) можно передать в функцию как параметр, и вместе с ним передадутся все методы класса, связанные с этим объектом. Однако, поскольку класс Eeprom у вас шаблонный, то придется сделать финт ушами с наследованием шаблонного класса от базового бесшаблонного и указанием в качестве типа входного параметра базового класса. Довольно муторная конструкция, хотя и позволяет "протолкнуть" через параметр различные типы, лишь бы они наследовались от одного и того же типа. Поэтому в вашем случае тут как бы желательно пересмотреть подход вообще к структуре программы. В начале темы я упоминал, что поскольку запись в еепром (и во флеш МК тоже) выполняется в фиксированном размере - байт, слово, то самому классу Eeprom, реализующему механизмы записи/чтения, разные типы хранения данных не нужны - один фик любой размер, любая структура данных приводится к фиксированному размеру. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
remontsofta 1 19 февраля Опубликовано 19 февраля · Жалоба вот сейчас пытаюсь как раз таким образом извратиться. По идее итоговый класс должен содержать данные, в соответствии со структурой пользователя, а базовый - обрабатывать уже их, скрывая неудобства. На счет структуры программы - она такая, какая и должна быть. Это общая для всей программы структура данных, которые хранятся энергонезависимо. Пароль вай фай, номер устройства, номер прошивки, статус последней перезагрузки и прочее. Доступ к этим данными нужен отовсюду. Хочется сделать его удобным. И даже было бы это блажью - очень странно, если её нельзя было реализовать на с++. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
remontsofta 1 22 февраля Опубликовано 22 февраля · Жалоба Отчитываюсь. Удачно удалось унаследовать шаблонный класс, в котором только определяемая пользователем структура, от базового, в котором все функции обработки данных. Обработку данных пришлось переписать на указатели - но это практически то же. Код методов находится в cpp модуле и следовательно собирается отдельно. Теперь все движения с template class/extern template class даже прибавляют немного байт к прошивке - почему не знаю. Но по крайней мере я добился чего хотел. Объект шарится по модулям обычным extern и никакого оверхеда по коду нет. Ответы в теме очень помогли разобраться. Всем спасибо. 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться