Re: кастомный shared_ptr, наследование и проверка типов
От: jazzer Россия Skype: enerjazzer
Дата: 13.05.11 09:06
Оценка: 2 (1)
Здравствуйте, kbjm, Вы писали:

K>Вопрос:

K>Как правильно сделать проверку валидности преобразования Y* к T* во время компиляции?
вариант 1 (с перегрузкой, т.е. "плохой" конструктор просто не будет найден)
template<class T> template<class Y>
inline
typename boost::enable_if< boost::is_convertible<X,Y> >::type 
shared_ptr<T>::attachStorage(shared_ptr_storage<Y> *pStorage)
{
}

вариант 2 (с ошибкой компиляции)
template<class T> template<class Y>
inline void
shared_ptr<T>::attachStorage(shared_ptr_storage<Y> *pStorage)
{
  BOOST_STATIC_ASSERT((boost::is_convertible<X,Y>::value));
  // или (еще и типы распечатает)
  BOOST_MPL_ASSERT_MSG((boost::is_convertible<X,Y>::value), NO_CONVERSION, (types<X,Y>));
}
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.