谁能说出为什么这个函数对象不需要指定的类型?

    class StringPtrTmplLess
{
public:
    template<typename PtrType>
    bool operator()(const PtrType * lhs, const PtrType * rhs)
    {
        return *lhs < *rhs;
    }
};

int main()
{
    set<string*, StringPtrTmplLess> s2;
    return 0;
}

编译器如何知道将使用哪种指定类型初始化StringPtrTmplLess?

最佳答案

这是因为template argument deduction的原因,这意味着模板参数是从传递给函数调用的参数类型推导出来的。此类型推导由编译器完成。通过the link进行详细说明。

09-26 07:07