我试图为参与者定义一个默认值,该参数是一个仿函数。但我得到了这个错误:
注意:候选模板被忽略:无法推断模板参数 '小样'
这是我的功能定义:
template <typename RAIterator, typename Comp>
void somefunction(RAIterator beg, RAIterator end, Comp comp=
[](const typename iterator_traits<RAIterator>::value_type& a,
const typename iterator_traits<RAIterator>::value_type& b)->bool
{return b<a?true:false;}){
//the content of the "somefunction"
}
我想知道我是否可以这样做,如果是这样,那部分我做错了。谢谢。
答案 0 :(得分:2)
您无法为模板参数提供默认参数,而无需用户明确指定Comp
的类型,这对于此用例非常不方便。你可以做两件事之一。您可以提供一个默认传递的重载:
template <typename RAIterator, typename Comp>
void somefunction(RAIterator beg, RAIterator end, Comp comp ) { ... }
template <typename RAIterator>
void somefunction(RAIterator beg, RAIterator end) {
somefunction(beg, end, std::less<typename std::iterator_traits<RAIterator>::value_type>{});
}
或者,您可以将comp
的类型设为非推导上下文,这样可以添加默认参数,但在这种情况下会增加可能的开销,因为我们将其设为{{1 }}:
std::function