Здравствуйте, 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();
Понятно что иногда явное указание типа только вредит, но иногда и помогает (ака аннотаци типов для ФЯ, но там эффект более глобальный, не только читабельность).