【发布时间】:2020-06-01 10:18:17
【问题描述】:
我有一个函数,如果 value_one 大于或小于 value_two 基于通过的比较,则打印出它。
template<typename T, typename cmp = less<T> >
void function(T value_one, T value_two, cmp) {
cmp comparator;
if (comparator(value_one, value_two)) {
std::cout << value_one;
}
}
现在,这个函数默认使用less函数对象来决定是否打印value_one,但也可以使用more函数对象。
template<typename T>
class more {
public:
bool operator()(const T& value_one, const T& value_two) {
return value_one > value_two;
}
};
template<typename T>
class less{
public:
bool operator()(const T& value_one, const T& value_two) {
return value_one < value_two;
}
};
当我在 main 中调用以下代码时
more<int> a;
function(7,5,a);
7 按预期打印,但下一个代码被认为是非法的,VS 告诉我找不到匹配的重载函数。
function(5,7);
我认为 cmp 函数对象在未明确提供时默认为 less,因此仍然可以工作。为什么这不起作用?有没有办法让这段代码工作而不重载它只有两个参数?
【问题讨论】:
标签: c++ templates visual-c++ default-arguments