transform()需要多少个参数

How many arguments are required by transform()?

本文关键字:多少 参数 transform      更新时间:2023-10-16

以下代码对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

因为same不是有效的UnaryOperator,因为它是一个模板函数。你想要这样的东西:

&same< typename iterator_traits< Out >::value_type >

注意&是可选的

或者你可以把same变成一个多态函数对象:

struct same
{
    template< typename T >
    T operator ()( T const& t ) const { return t; }
};

并且使用CCD_ 7作为CCD_。