我试着写:
#include <functional>
template<class T, class func = std::less<T>>
class Car {
public:
void check(const T& x, const T& y) {
func(x, y); //.... << problem
}
};
int main() {
Car<int> car;
car.check(6, 6);
return 0;
}
我的意思是它会识别<
int
的常用内容,但它会说明我标记的位置:
没有匹配函数来调用'std :: less :: less(const int&amp;,const INT&安培)”
但是,如果我使用自定义Car
创建func
,那么它可以正常工作......我该如何解决这个问题?
答案 0 :(得分:4)
您的问题是您需要func
的实例,因为std::less<T>
是一个仿函数(即类类型)而不是函数类型。当你有
func(x, y);
您实际上尝试使用std::less<T>
和x
构建一个未命名的y
作为构造函数的参数。这就是你得到的原因
没有匹配函数来调用'std :: less :: less(const int&amp;,const int&amp;)'
因为std::less::less(const int&, const int&)
是构造函数调用。
你可以看到它像这样工作:
#include <functional>
template<class T, class func = std::less<T>>
class Car {
func f;
public:
void check(const int& x, const int& y) {
f(x, y);
// or
func()(x, y); // thanks to Lightness Races in Orbit http://stackoverflow.com/users/560648/lightness-races-in-orbit
}
};
int main() {
Car<int> car;
car.check(6, 6);
return 0;
}