реклама на сайте
подробности

 
 
> C++ c шаблонами, нужен шаблонный маг!
esaulenka
сообщение Jan 15 2016, 08:25
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 032
Регистрация: 13-03-08
Из: Маськва
Пользователь №: 35 877



Заткнулся на одной задачке. CortexM3, GCC.

Есть структура во флеше с настройками. Адрес структуры зафиксирован линкером.
Запись настроек производится однократно, в произвольном порядке.

Для облегчения записи сделал класс

Код
CFwSetting {
public:
static bool IsPresent () { ... }
static bool Write (const void * data) { ... }
static bool Compare (const void * data) { ... }
};


Теперь пытаюсь сделать его шаблонным, чтобы использовать для каждого поля:
Код
template <int Addr, int Len>
class CFwSetting_Base {
...
};

typedef CFwSetting_Base <(int)&Settings.SerialNumber, sizeof(Settings.SerialNumber)>        CFwSerial;


Проблем две:
1) оно в принципе не работает. Компилятор говорит "не знаю я адрес твоей структуры!". Если адрес вбить константой, работает. Но некрасиво...

2) некрасиво указывать название поля два раза - для адреса и для размера.


--------------------
Тут обсуждается творческий порыв, а не соответствие каким-либо стандартам ©
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SlavaV
сообщение Jan 15 2016, 09:10
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 100
Регистрация: 13-06-06
Из: г.Улан-Удэ
Пользователь №: 18 024



зачем здесь класс и тем-более шаблоны, из приведённого кода это всё лишнее

В CFwSetting, если это структура (ключевое слово не видно) директива public: лишняя. У структур члены по умолчанию public

PS Если структура настроек расположена во флешке (ROM) как её писать планируется?

Сообщение отредактировал SlavaV - Jan 15 2016, 09:28
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd August 2025 - 23:58
Рейтинг@Mail.ru


Страница сгенерированна за 0.01353 секунд с 7
ELECTRONIX ©2004-2016