Sta*_*ilo 3 c++ templates class
我试着写:
#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;
}
Run Code Online (Sandbox Code Playgroud)
我在这里的意思是它会识别通常的<for int,但它说明了我标记的位置:
没有用于调用“std::less::less(const int&, const int&)”的匹配函数
但是,如果我创建了一个Car自定义的,func那么它就可以工作了……我该如何解决这个问题?
你的问题是你需要一个func因为std::less<T>是函子(即类类型)而不是函数类型的实例。当你有
func(x, y);
Run Code Online (Sandbox Code Playgroud)
您实际上尝试构造一个未命名的std::less<T>withx和y作为构造函数的参数。这就是为什么你得到
没有用于调用“std::less::less(const int&, const int&)”的匹配函数
就像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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2433 次 |
| 最近记录: |