Идея проста и стоит во главе идеологии C++:
std::string password, login;
unsigned short TCPport, YearOfBirth;
Компилятор запрещает бессмысленные присвоения:
login = TCPport; // error
Однако не менее бессмысленные:
TCPport = YearOfBirth; // ok
запретить не может.
Писать класс для каждого подобного типа не реально.
Возникла идея написать шаблон прокси класса:
template< class ContainType >class UniqueType{
ContainType v;
public:
UniqueType( ContainType c ): v( c ){}
operator ContainType(){ return v; }
// При необходимости перегружаем еще что-нибудь.
};
Вопрос: как обеспечить уникальность типа?
Хочется чтоб выглядело приблизительно так:
UniqueType< std::string > password = "******"; // уникальный тип
UniqueType< std::string > login = "rs4i"; // уникальный тип
password = login; // error