【发布时间】:2011-02-01 02:30:19
【问题描述】:
经过一番努力,我设法获得了提升智能指针,以便在警告级别 4 下为 Windows CE/Mobile 构建。
我找到了消除编译错误和警告的最小阻力方式
#define BOOST_NO_MEMBER_TEMPLATES
实际上是什么意思?我把我的灵魂卖给了魔鬼吗?当我真正使用这些类型时,一切都会崩溃吗?
【问题讨论】:
标签: c++ templates windows-mobile boost
经过一番努力,我设法获得了提升智能指针,以便在警告级别 4 下为 Windows CE/Mobile 构建。
我找到了消除编译错误和警告的最小阻力方式
#define BOOST_NO_MEMBER_TEMPLATES
实际上是什么意思?我把我的灵魂卖给了魔鬼吗?当我真正使用这些类型时,一切都会崩溃吗?
【问题讨论】:
标签: c++ templates windows-mobile boost
本身不应该有任何不良影响,只是功能丧失。
成员模板是一个成员函数,它是一个模板,例如:
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,这样你就失去了一些自动转换的能力。
【讨论】: