![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| kuzulis |
|
||||||||||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
Всем доброго времени.
Имеется некое ембеддед у-во (на ARM MCU). Оно имеет адресное пространство из 4 байтных регистров, где каждый регистр, соответственно, имеет уникальный адрес и назначение. Для простоты пусть будет как-то так:
Т.е. у нас есть как-бы две разных сущности (Entity A, B) , каждая из которых состоит из трех однотипных регистров x,y,z. Также, каждая сущность имеет разный набор флагов (масок) для своих регистров):
Далее, объявлена некая структура, описывающая карту регистров сущностей:
На C имеется API для доступа к регистрам и установки/сброса флагов:
ИМХО, это API ужасно. Так, на С++ (без шаблонов) я бы реализовал это как-то так (псевдо код):
Но опять-таки это накладно, громоздко и пр.. Хотелось бы упростить это с использованием шаблонов.. Например, как-то так:
возможно ли это? Или можно как-нибудь по другому упростить API? |
||||||||||||
|
|||||||||||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
если переменная часть - базовый адрес и набор флагов, можно типа такого (проверки не стал делать что бы не загромождать)
это наверно не идеальный вариант, зависит от того, как вы будете использовать, но в качестве источника некоторых идей думаю пойдет Это сообщение отредактировал(а) baldina - 9.1.2014, 17:57 |
|||
|
||||
| kuzulis |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 154 Регистрация: 5.9.2007 Репутация: нет Всего: 1 |
Да, спасибо.. Но все-равно что-то не то.. Наверное останусь на чистых С-ях и попробую переделать API на что-то человеческое..
|
|||
|
||||
| baldina |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
тогда достаточно одной функции
ну и вариации по желанию
|
||||
|
|||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
вариации можно темплейтами (мне правда не нравится)))
|
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Недавно я наблюдал споры о некоем сингелтоне, точнее, о его потоконебезопасности на компиляторах, не поддерживающих стандарт С++ 11 чтоли. Но не суть важно. Но это я всё посчитал лабудой, так как там стоит дождаться выхода компилятора, соответствующего стандарту. А вот что мне показалось более забавным. Раз возможно описать Singleton, то можно описать и Doubleton (класс, который будет содержать только два экземпляра), и Tripleton (три, соответственно), .. и N-ton.
От нефикх делать я даже несколько вариантов таких закорючек составил. Так что не парьтесь. Реализуйте шаблон для Entity, а дальше Entity объединяйте с Nton'ом (вот вам и своеобразный аналог enum через шаблоны). Добавлено @ 20:37 Doubleton, Tripleton и Nton - теперь мой копирайт. При перепечатке "ля-ля-тополя" и так далее Это сообщение отредактировал(а) akizelokro - 9.1.2014, 20:43 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
||||
|
||||
| akizelokro |
|
||||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Мне, глупо говоря, первая реализация, которая пришла в голову, Doubleton было до ужасти корявое
И там же Tripleton и Nton. Но, когда я впендюрился недавно с 'template', я покопался в куче статей, заодно нашёл и обсуждение, почему Singleton малореальный в реальной жизни класс (потому что трудно найти в жизни неповторимые объекты), потом нашёл баг с "internal error" MS VS 2010 (да и в VS2012 его, как оказалось не поправили) при компиляции выражения template <typename T> typename struct.. А идейка с "размножением" Singleton'а до Nton'ов мне показалась жутко забавно. Может, там и enum удастся свести к простым шаблонам (да и не только целые числа). Добавлено @ 22:09
Ну, это бывает, тут не спорю. Да и то не во все. В unix-программирование я не лезу, в builder и gtk я тоже не суюсь, также и в 3D графику. Ну и ещё в кое-что. Где-то я прописываюсь, потому что задачи бывают разные. Гуи в Видне, multibyte и widestrings, ActiveX, немного потоков и работы с сетями. Просто у меня бывает широкий спектр задач. Где что просекаю, хоть немного, могу вставиться. Singleton - паттерн Майерса. Забей Это сообщение отредактировал(а) akizelokro - 9.1.2014, 23:03 -------------------- a = a + b; b = a - b; a = a - b; |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |