在一些挣扎后,我成功地将Boost智能指针编译为适用于Windows CE/Mobile的警告级别为4的版本。
我发现消除编译错误和警告的最简单方法是:
#define BOOST_NO_MEMBER_TEMPLATES
这实际上是什么意思?我是否已经把灵魂卖给了魔鬼?当我实际使用这些类型时,会发生什么不好的事情吗?
在一些挣扎后,我成功地将Boost智能指针编译为适用于Windows CE/Mobile的警告级别为4的版本。
我发现消除编译错误和警告的最简单方法是:
#define BOOST_NO_MEMBER_TEMPLATES
这实际上是什么意思?我是否已经把灵魂卖给了魔鬼?当我实际使用这些类型时,会发生什么不好的事情吗?
本身不会有任何负面影响,只是会丧失一些功能。
成员模板是一个模板成员函数,例如:
struct foo
{
template <typename T>
void i_am_not_supported_sometimes(void);
};
为了避免产生未定义的行为或其他问题,您不能以最通用的方式编写程序。我认为确定性的“这样做是否不好”答案取决于它被用于什么以及解决方法是什么。
例如,看一下smart_ptr
,没有成员模板版本就是简单地删除成员模板,如下所示:
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
,因此您失去了一些自动转换的能力。