自动模板参数推断不起作用

时间:2013-08-05 09:17:57

标签: c++ templates

为什么我会:

missing template arguments before ‘(’ token

使用时:

sort(index_mu.begin(), index_mu.end(), index_cmp(mu_pt_corrected));

其中index_mustd::vector<int>mu_pt_correctedstd::vector<float>

template<class T> struct index_cmp {
    index_cmp(const T arr) : arr(arr) {}
    bool operator()(const size_t a, const size_t b) const
    { return arr[a] > arr[b]; }
    const T arr;
};

编译器是否能够取消T的类型?为什么呢?

1 个答案:

答案 0 :(得分:4)

模板参数推导仅适用于函数。在 一般来说,编译器不会有必要的信息 推导出一个类的参数。出于这个原因,这很常见 在这种情况下,添加一个函数:

template <typename T>
index_cmp<T>
indexCmp( T const& arr )
{
    return index_cmp<T>( arr );
}

然后你可以打电话:

sort( index_mu.begin(), index_mu.end(), indexCmp( mu_pt_corrected ) );

编译器将推断出函数的类型 定义类型。