【问题标题】:boost smart pointers and BOOST_NO_MEMBER_TEMPLATES提升智能指针和 BOOST_NO_MEMBER_TEMPLATES
【发布时间】:2011-02-01 02:30:19
【问题描述】:

经过一番努力,我设法获得了提升智能指针,以便在警告级别 4 下为 Windows CE/Mobile 构建。

我找到了消除编译错误和警告的最小阻力方式

#define BOOST_NO_MEMBER_TEMPLATES

实际上是什么意思?我把我的灵魂卖给了魔鬼吗?当我真正使用这些类型时,一切都会崩溃吗?

【问题讨论】:

    标签: c++ templates windows-mobile boost


    【解决方案1】:

    本身不应该有任何不良影响,只是功能丧失。

    成员模板是一个成员函数,它是一个模板,例如:

    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,这样你就失去了一些自动转换的能力。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多