| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Шаблоны - и union |
| Автор: Lazin 27.12.2007, 14:50 | ||||||||||||||
| Я сейчас работаю над одной проблемой, которая вызывает некоторые затруднения, вот ее упрощенный аналог: есть такая структура
. она должна обрабатываться методом
шаблонные параметры: Format - преобразует число содержащееся в структуре по некоторому правилу, реализации Format исходят из того что в структуре содержится число определенного типа (поле type не проверяется)
в общем эти классы нужны для преобразования значения VALUE? и их может быть много Packer - класс обеспечивающий сжатие данных, он то-же работает с VALUE как со значением определенного типа (предварительно структура должна быть обработана соответствующим методом Format)
в общем я этим хочу добится 2х вещей, что-бы не проверять каждый раз тип структуры VALUE, так как он известен на этапе компиляции, и комбинировать разные методы обработки VALUE короче я хочу делать так:
..... проблема в том что теперь возможен и такой вариант
и тд что в моем случае недопустимо можно в принципе использовать STATIC_ASSERT что-бы на стадии компиляции запрещать невозможные комбинации, но я не могу отделаться от одной мысли: если у меня возникла такая ситуация, значит декомпозиция задачи выполнена не верно, я где-то допустил ошибку в проектировании, что вы думаете по этому поводу? |
| Автор: archimed7592 27.12.2007, 16:43 | ||
Fromatter и Packer соответственно переделать под более строгие типы(double и long). |
| Автор: Lazin 28.12.2007, 09:26 |
| archimed7592, твой вариант: + делает невозможным лишние комбинации - лишний шаблонный параметр ----------------------------- мне кажется что можно сделать проще, но как - пока не скажу)) |
| Автор: archimed7592 28.12.2007, 13:03 |
Можно: добавить к VALUE неявное преобразование как к double, так и к long, после чего форматеры и пакеры писать так, чтобы принимали аргумент нужного типа(а не VALUE). Только, лично мне кажется наоборот, что с третьим параметром кошернее Добавлено через 1 минуту и 1 секунду Ещё можно сделать так, чтобы этот третий параметр шёл аргументом и вычислять его автоматически - тогда и параметр будет и указывать его не нужно будет |
| Автор: baldina 28.12.2007, 18:47 | ||||||
archimed7592,
в принципе - да, но лучше его неявно использовать, учтя, что он есть свойство Format и Packer: сделаем его параметром этих классов Lazin, посмотри:
Добавлено @ 18:54 можно даже так, что бы в конструкторах Pack не думать о проверках:
|
| Автор: baldina 28.12.2007, 19:02 | ||
Lazin,
имхо все у тебя с дизайном правильно, просто чуть не дотянул до реализации |