自定义比较器和模板的特定问题

specific problem with custom comparators and templates

本文关键字:问题 比较器 自定义      更新时间:2023-10-16

抱歉问了这么多,但我遇到了另一个我不知道如何解决的问题......据我所知,gcc 无法解析 myComparator 类类型,可能是因为以下代码不符合标准。问题是我是否遗漏了某些东西,或者是否有解决此问题的方法,这不需要太多更改(例如接口解决方案)......

template <typename DATA> class myArray
{
    template <typename F> void sort (F &comp)
    {
        // No problems here
    }
    template <typename T> void sort(void)
    {
        T::myComparator cmp; //Error: expected `;' before 'zzz'
        // T::template myComparator cmp; also doesn't work
        sort(cmp);
    }
};
class test
{
public:
    class myComparator
    {
    public:
        bool operator() ( const test *t1, const test * t2)
        {
            // No problems here
        }
    };
};
void testCmp()
{
    myComparator cmp;
    cmp.sort<test>();
}

您必须将typename用作:

  typename T::myComparator cmp; 
//^^^^^^^

typename是必需的,因为myComparator是依赖名称。

请参阅堆栈溢出本身的C++常见问题解答:

"我必须在哪里以及为什么必须将templatetypename放在依赖名称上?"