После некоторой борьбы мне удалось заставить интеллектуальные указатели повышения создавать для Windows CE / Мобильный при предупреждении уровня 4.
Я нашел путь наименьшего сопротивления избавиться от ошибок компиляции и предупреждений быть
#define BOOST_NO_MEMBER_TEMPLATES
Что это на самом деле означает? Я продавал свою душу дьяволу? Весь ад вырвется на свободу, когда я на самом деле буду использовать типы?
Не должно быть никаких плохих эффектов как таковых, только потеря функциональности.
Шаблон-член - это функция-член, которая является шаблоном, например:
struct foo
{
template <typename T>
void i_am_not_supported_sometimes(void);
};
Таким образом, вы не получаете неопределенного поведения или чего-то еще, вы просто не можете программировать что-либо в самом общем виде. Я думаю, что окончательный ответ «это плохо» зависит от того, для чего именно он использовался и каков был обходной путь.
Если посмотреть на smart_ptr
, например, версия без-member-templates буквально просто удаляет шаблоны элементов, такие как:
template<class Y>
explicit shared_ptr( Y * p ): px( p ), pn( p ) // Y must be complete
{
boost::detail::sp_enable_shared_from_this( this, p, p );
}
И заменяет Y
на T
, поэтому вы теряете возможность некоторых автоматических преобразований.