реализация идеомы Uniquetype

  • Автор темы rs4i
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

rs4i

#1
Идея проста и стоит во главе идеологии C++:
Код:
std::string password, login;
unsigned short TCPport, YearOfBirth;
Компилятор запрещает бессмысленные присвоения:
Код:
login = TCPport; // error
Код:
Однако не менее бессмысленные:
password = login; TCPport = YearOfBirth; // ok
запретить не может.
Писать класс для каждого подобного типа не реально.
Возникла идея написать шаблон прокси класса:
Код:
template< class ContainType >class UniqueType{
ContainType value;
public:
UniqueType( ContainType value ): value( value ){}
operator ContainType(){ return value; }
// При необходимости перегружаем еще что-нибудь.
};
Вопрос как обеспечить уникальность типа.
Очевидное решение слегка не удобно:
Код:
template< class ContainType, class Name >class UniqueType;
struct myPasword{}; // каждый раз определять новые бесполезные именные типы
UniqueType< std::string, myPasword > password; // уникальный тип
Пытался сделать так:
Код:
template< class ContainType, int n >class UniqueType;
UniqueType< std::string, 1 > password; // уникальный тип
UniqueType< std::string, 2 > login; // уникальный тип
только вместо чисел подставить некий шаблон счетчик,
однако реализовать его не смог :lol: Мозг ушел в глубокую рекурсию :D
Остались вопросы:
1. Как реализовать шаблон UniqueType?
2. Можно ли здесь обойтись без макросов?
3. Возможно ли реализовать (уже дело принципа) шаблон счетчик?
Прошу высказать любые соображения по теме.
 
R

rs4i

#2
Пока есть следующий макрушный вариант:
Код:
template< class ContainType, class TypeName >class UniqueType{
ContainType v;
public:
UniqueType( ContainType c ): v( c ){}
operator ContainType(){ return v; }
};

#define TypedefUniqueType( ContainType, TypeName )\
struct MACRO__##TypeName{};\
typedef UniqueType< ContainType, MACRO__##TypeName > TypeName

TypedefUniqueType( std::string, PasswordType );
PasswordType password; // уникальный тип

TypedefUniqueType( std::string, LoginType );
LoginType login; // уникальный тип

login = password; // error
 
R

rs4i

#4
Тема мной не закрыта.
Уже есть несколько кривоватых решений,
и некоторое количество идей.
Идеи в разработке.
Если кому интересно, дайте знать, я поделюсь.
А так .. больше постить не буду.
Чао.
 
Статус
Закрыто для дальнейших ответов.