![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Lazin |
|
||||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
Я сейчас работаю над одной проблемой, которая вызывает некоторые затруднения, вот ее упрощенный аналог:
есть такая структура
. она должна обрабатываться методом
шаблонные параметры: Format - преобразует число содержащееся в структуре по некоторому правилу, реализации Format исходят из того что в структуре содержится число определенного типа (поле type не проверяется)
в общем эти классы нужны для преобразования значения VALUE? и их может быть много Packer - класс обеспечивающий сжатие данных, он то-же работает с VALUE как со значением определенного типа (предварительно структура должна быть обработана соответствующим методом Format)
в общем я этим хочу добится 2х вещей, что-бы не проверять каждый раз тип структуры VALUE, так как он известен на этапе компиляции, и комбинировать разные методы обработки VALUE короче я хочу делать так:
..... проблема в том что теперь возможен и такой вариант
и тд что в моем случае недопустимо можно в принципе использовать STATIC_ASSERT что-бы на стадии компиляции запрещать невозможные комбинации, но я не могу отделаться от одной мысли: если у меня возникла такая ситуация, значит декомпозиция задачи выполнена не верно, я где-то допустил ошибку в проектировании, что вы думаете по этому поводу? |
||||||||||||||
|
|||||||||||||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Fromatter и Packer соответственно переделать под более строгие типы(double и long). -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 41 Всего: 154 |
archimed7592, твой вариант:
+ делает невозможным лишние комбинации - лишний шаблонный параметр ----------------------------- мне кажется что можно сделать проще, но как - пока не скажу)) |
|||
|
||||
| archimed7592 |
|
|||
![]() Архимед ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2531 Регистрация: 12.6.2004 Где: Moscow Репутация: 58 Всего: 93 |
Можно: добавить к VALUE неявное преобразование как к double, так и к long, после чего форматеры и пакеры писать так, чтобы принимали аргумент нужного типа(а не VALUE). Только, лично мне кажется наоборот, что с третьим параметром кошернее Добавлено через 1 минуту и 1 секунду Ещё можно сделать так, чтобы этот третий параметр шёл аргументом и вычислять его автоматически - тогда и параметр будет и указывать его не нужно будет -------------------- If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas. © George Bernard Shaw |
|||
|
||||
| baldina |
|
||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
archimed7592,
в принципе - да, но лучше его неявно использовать, учтя, что он есть свойство Format и Packer: сделаем его параметром этих классов Lazin, посмотри:
Добавлено @ 18:54 можно даже так, что бы в конструкторах Pack не думать о проверках:
Это сообщение отредактировал(а) baldina - 28.12.2007, 19:09 |
||||||
|
|||||||
| baldina |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3433 Регистрация: 5.12.2007 Где: Москва Репутация: 32 Всего: 101 |
Lazin,
имхо все у тебя с дизайном правильно, просто чуть не дотянул до реализации |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |