非命名空间范围中的显式特化

template<typename T>

class CConstraint

{

public:

    CConstraint()

    {

    }


    virtual ~CConstraint()

    {

    }


    template <typename TL>

    void Verify(int position, int constraints[])

    {       

    }


    template <>

    void Verify<int>(int, int[])

    {   

    }

};

在g ++下编译它会产生以下错误:


非命名空间范围'class CConstraint'中的显式特化


在VC中,它编译得很好。任何人都可以让我知道解决方法吗?


largeQ
浏览 627回答 3
3回答

慕码人8056858

解决它的另一种方法是委托私有函数并重载该函数。这样,您仍然可以访问*this外部模板参数类型的成员数据。template<typename T>struct identity { typedef T type; };template<typename T>class CConstraint{public:&nbsp; template <typename TL>&nbsp; void Verify(int position, int constraints[])&nbsp; {&nbsp; &nbsp; Verify(position, constraints, identity<TL>());&nbsp; }private:&nbsp; template<typename TL>&nbsp; void Verify(int, int[], identity<TL>)&nbsp; {&nbsp; }&nbsp; void Verify(int, int[], identity<int>)&nbsp; {&nbsp; }};
打开App,查看更多内容
随时随地看视频慕课网APP