GCC错误:在非命名空间范围中显式专门化 [英] GCC error: explicit specialization in non-namespace scope

查看:187
本文介绍了GCC错误:在非命名空间范围中显式专门化的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图移植下面的代码。我知道该标准不允许在非名称域范围中显式专门化,我应该使用重载,但我无法找到在这种特殊情况下应用此技术的方法。

I am trying to port the following code. I know the standard doesn't allow explicit specialization in non-namescape scope and I should use overloading, but I just can't find a way to apply this technique in this particular case.

class VarData
{
public:
    template < typename T > bool IsTypeOf (int index) const
    {
        return IsTypeOf_f<T>::IsTypeOf(this, index); // no error...
    }

    template <> bool IsTypeOf < int > (int index) const // error: explicit specialization in non-namespace scope 'class StateData'
    {
        return false;
    }

    template <> bool IsTypeOf < double > (int index) const // error: explicit specialization in non-namespace scope 'class StateData'
    {
        return false;
    }
};


推荐答案

您只需移动成员模板的专业化

You just have to move your specializations of the member templates outside of the class body.

class VarData
{
public:
    template < typename T > bool IsTypeOf (int index) const
    {
        return IsTypeOf_f<T>::IsTypeOf(this, index);
    }
};

template <> bool VarData::IsTypeOf < int > (int index) const
{
    return false;
}

template <> bool VarData::IsTypeOf < double > (int index) const
{
    return false;
}

这篇关于GCC错误:在非命名空间范围中显式专门化的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆