rs4i
1 / 1 / 0
Регистрация: 25.06.2009
Сообщений: 13
|
|||||||||||||||||||||||||||||||
#1 | |||||||||||||||||||||||||||||||
Реализация идеомы UniqueType - C++25.06.2009, 22:12. Просмотров 707. Ответов 5
Метки нет Все метки)
(
Идея проста и стоит во главе идеологии C++:
Писать класс для каждого подобного типа не реально. Возникла идея написать шаблон прокси класса:
Очевидное решение слегка не удобно:
однако реализовать его не смог ![]() ![]() Бегло просмотрев кое-что по лиспу, стал подозревать что это не возможно. Остались вопросы: 1. Как реализовать шаблон UniqueType? 2. Можно ли здесь обойтись без макросов? 3. Возможно ли в принципе реализовать шаблон счетчик или иной генератор? 4. Кто-нибудь где-нибудь встречался с подобной идеомой?
0
|
|
Vourhey
Почетный модератор
6489 / 2263 / 123
Регистрация: 29.07.2006
Сообщений: 12,534
|
|
27.06.2009, 18:53 | #2 |
Скажи, что бессмысленного в присвоениии значения одной переменой другой?
Компилятор вполне осмысленно запрещает тебе присвоение значения одного типа переменной совершенно иного. Это предупреждает неопределенность в поведении программы и обращает внимание программиста на то, что он нифига не указал, че сделать хочет. То, что хочешь сделать ты, я тоже слабо понимаю.
0
|
Evg
![]() ![]() |
|
27.06.2009, 19:03 | #3 |
Из-за проблем с форумом часть постов похерилась. В общем, ему нужны типы, которые логически бы означали разные вещи. Что-то типа "typedef int aaa_t; typedef int bbb_t;" но при этом чтобы переменную типа aaa_t (которая, например означает килограммы), нельзя было присвоить в перменную типа bbb_t (которая означает километры).
rs4i, кроме черезж$пного способа, до которого ты уже и сам додумался (шаблон от двух типов, один из которых фиктивный, но уникальный), вроде бы больше ниикак не сделать
0
|
rs4i
1 / 1 / 0
Регистрация: 25.06.2009
Сообщений: 13
|
|
29.06.2009, 08:04 [ТС] | #4 |
Найден вот такой подход:
template< class T, int > class UniqueType{ /**/ }; UniqueType< std::string, __LINE__ > login = "rs4i"; UniqueType< std::string, __LINE__ > pass = "******"; login = pass; // error Все это легко оборачиваеться в макрос. Выглядеть будет приблизительно так: MacroUniqueType( std::string ) login = "rs4i"; Это не совсем коректно, так как, в разных файлах на одинаковый по номеру строках можно создать одинаковые типы. Добавлено через 28 минут 25 секунд еще тему нарыл: http://rsdn.ru/forum/cpp/2337981.aspx
0
|
rs4i
1 / 1 / 0
Регистрация: 25.06.2009
Сообщений: 13
|
||||||
29.06.2009, 12:36 [ТС] | #6 | |||||
Не уверен. Более того, думаю что не стоит.
Код счетчика
Решение конечно интересное .. но .. похоже бесполезное. Еще не вечер. Может нарою еще что.
0
|
29.06.2009, 12:36 | |