Re[4]: implicit_cast
От: Юрий Жмеренецкий ICQ 380412032
Дата: 13.01.09 10:01
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Юрий Жмеренецкий, Вы писали:


ЮЖ>>В этом случае будет достаточно и static_cast'a. Зачем использовать const_cast кроме как для снятия константности с пути доступа? Это ведь его основное предназначение.


E>IMHO, намного добрее такая штука:

template<typename T> const T& to_const( T& a ) { return a; }
E>template<typename T> const T& to_const( const T& a ) { return a; }
E>template<typename T> const T* to_const( T* a ) { return a; }
E>template<typename T> const T* to_const( const T* a ) { return a; }

E>просто, ясно, читабельно, и не туда случайно не приведёшь...

+1, static_cast только для примера был. Мне вообще так читабельней:
 
// from boost
template <typename T> 
inline T implicit_cast(typename identity<T>::type x) {
    return x;
}

Многословней, это да...
identity для запрета вывода типа, для того чтобы его всегда надо было указывать.
Ближе к '*_cast' семейству и точнее выражает намерение. Да и тип (при использовании) сразу перед глазами:
implicit_cast<const type&>(*iter).function();

Понятно что иногда явное указание типа только вредит, но иногда и помогает (ака аннотаци типов для ФЯ, но там эффект более глобальный, не только читабельность).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.