повысьте интеллектуальные указатели и BOOST_NO_MEMBER_TEMPLATES

После некоторой борьбы мне удалось заставить интеллектуальные указатели повышения создавать для Windows CE / Мобильный при предупреждении уровня 4.

Я нашел путь наименьшего сопротивления избавиться от ошибок компиляции и предупреждений быть

#define BOOST_NO_MEMBER_TEMPLATES

Что это на самом деле означает? Я продавал свою душу дьяволу? Весь ад вырвется на свободу, когда я на самом деле буду использовать типы?

5
задан Georg Fritzsche 26 March 2010 в 20:46
поделиться

1 ответ

Не должно быть никаких плохих эффектов как таковых, только потеря функциональности.

Шаблон-член - это функция-член, которая является шаблоном, например:

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 , поэтому вы теряете возможность некоторых автоматических преобразований.

4
ответ дан 15 December 2019 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: