повысить умные указатели и BOOST_NO_MEMBER_TEMPLATES - PullRequest
5 голосов
/ 26 марта 2010

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

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

#define BOOST_NO_MEMBER_TEMPLATES

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

1 Ответ

4 голосов
/ 26 марта 2010

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

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

struct foo
{
    template <typename T>
    void i_am_not_supported_sometimes(void);
};

Таким образом, вы не получаете неопределенного поведения или чего-либо еще, вы просто не можете программировать вещи самым общим образом. Я думаю, что окончательный ответ «это плохо» зависит именно от того, для чего он использовался, и каков был обходной путь.

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

...