以下代码有关于transform()
的参数数量的错误。 transform()
有两个版本,一个需要四个参数,另一个需要五个。为什么编译器试图使用第二个版本?顺便说一下,我正在使用VS2008
template<class T> T same(const T& t){ return t; }
template<class In, class Out>
Out my_copy(In first, In last, Out res){
return transform(first, last, res, same);
}
void test(){
int a[]={1,2,3,4,5,6};
vector<int> v(a,a+sizeof(a)/sizeof(int));
vector<int> v2(v.size());
my_copy(v.begin(), v.end(), v2.begin());
}
// error C2780: '::std::_Enable_if<!std::_Is_checked_iterator<_OutIt>::_Result||!std::_Is_checked_iterator<_OutIt>::_Result,_OutIt>::_Result std::transform(_InIt1,_InIt1,_InIt2,_OutIt,_Fn2)' : expects 5 arguments - 4 provided
答案 0 :(得分:3)
因为same
不是有效UnaryOperator
,因为它是模板函数。你需要这样的东西:
&same< typename iterator_traits< Out >::value_type >
请注意&
是可选的
或者你可以将same
变成多态函数对象:
struct same
{
template< typename T >
T operator ()( T const& t ) const { return t; }
};
并使用same()
作为UnaryOperator
。