Re: Реализация идеомы UniqueType
От: frogkiller Россия  
Дата: 28.06.09 19:24
Оценка:
Здравствуйте, rs4i, Вы писали:

R>Вопрос: как обеспечить уникальность типа?


Не так давно тут была забавная тема про compile-time счётчик
Автор: remark
Дата: 07.02.07
.
Думаю, копать надо в этом направлении.
Курица — это инструмент, с помощью которого одно яйцо производит другие.
Re[5]: Реализация идеомы UniqueType
От: rs4i  
Дата: 29.06.09 03:03
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>Но с практической точки зрения тег можно нагрузить еще и полезной метаинформацией, тогда запись типа станет лаконичной, а код более читаемый:


АШ>
АШ>// тег для логина
АШ>struct Login
АШ>{
АШ>    typedef std::string Type;
АШ>};
АШ>// тег для пароля
АШ>struct Password
АШ>{
АШ>    typedef std::string Type;
АШ>};

АШ>template<typename T>
АШ>class UniqueType
АШ>{
АШ>public:
АШ>     typedef typename T::Type Type;

АШ>     explicit UniqueType(const T &value) : value(value) {}
АШ>...
АШ>private:
АШ>     Type value; 
АШ>};

АШ>...
АШ>UniqueType<Login> login("User");
АШ>UniqueType<Password> password("***");
АШ>


Так, выглядит значительно лучше.
Но желательно описать переменную одной строкой, и там же ее инициализировать.
На каждый новый тип нужен новый тег, а это несколько лишних строк.
Re[4]: Реализация идеомы UniqueType
От: rs4i  
Дата: 29.06.09 03:25
Оценка:
Здравствуйте, Юрий Жмеренецкий, Вы писали:

ЮЖ>Не дописал пару строк. Этим предполагается инстанциировать

ЮЖ>
ЮЖ>template<class Tag>class UniqueType {
ЮЖ> typename Tag::type v;
ЮЖ> //...
ЮЖ>}
ЮЖ>//...
ЮЖ>UniqueType<name> n = ...;
ЮЖ>


Ну да. Я упустил это из вида.
Тег можно не просто как имя использовать,
но и нагрузить дополнительной полезной информицией.
Например базовый тип.
Можно туда же поместить и предикат для рантайм проверки.
В случае с std::string например, регулярное выражение.
Это где-нибудь уже реализовано?
Re[4]: Реализация идеомы UniqueType
От: rs4i  
Дата: 29.06.09 03:44
Оценка:
Здравствуйте, vadimcher, Вы писали:
V>Ты не понял в чем вопрос. Если ты хочешь завести две совместимые переменные ОДНОГО типа UniqueType<std::string>, например, oldpassword и newpassword, то как ты это сделаешь в твоем примере?
Как то так:
typedef UniqueType< std::string > Password;
Password oldpassword;
Password newpassword;

Можно поместить информацио о типе в сам шаблон:
UniqueType< std::string > oldpassword;
oldpassword::Type newpassword;
Re[5]: Реализация идеомы UniqueType
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 29.06.09 04:40
Оценка:
Здравствуйте, rs4i, Вы писали:

R>UniqueType< std::string > oldpassword;

R>oldpassword::Type newpassword;

Это как?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[5]: Реализация идеомы UniqueType
От: Юрий Жмеренецкий ICQ 380412032
Дата: 29.06.09 10:17
Оценка:
Здравствуйте, rs4i, Вы писали:
...
R>Можно туда же поместить и предикат для рантайм проверки.
R>В случае с std::string например, регулярное выражение.
R>Это где-нибудь уже реализовано?

Здесь например
Re[2]: Реализация идеомы UniqueType
От: rs4i  
Дата: 29.06.09 10:39
Оценка:
Здравствуйте, frogkiller, Вы писали:

F>Здравствуйте, rs4i, Вы писали:


R>>Вопрос: как обеспечить уникальность типа?


F>Не так давно тут была забавная тема про compile-time счётчик
Автор: remark
Дата: 07.02.07
.

F>Думаю, копать надо в этом направлении.

Я в общем-то в этом направлении и копал, пока не убедился что это сделать нельзя.
(смотрел ликбез по лиспу)
Счетчик интересный получился, только не везде рабочий.
На VC9 считает до 498, на GCC не работает
Re[6]: Реализация идеомы UniqueType
От: rs4i  
Дата: 29.06.09 10:54
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, rs4i, Вы писали:


R>>UniqueType< std::string > oldpassword;

R>>oldpassword::Type newpassword;

ГВ>Это как?


Это я погорячился.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.