为什么我会:
missing template arguments before ‘(’ token
使用时:
sort(index_mu.begin(), index_mu.end(), index_cmp(mu_pt_corrected));
其中index_mu
为std::vector<int>
且mu_pt_corrected
为std::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
的类型?为什么呢?
答案 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 ) );
编译器将推断出函数的类型 定义类型。