2011-11-04 3 views
1

다음 코드는 transform()에 대한 인수의 개수에 대해 오류가 있습니다. transform()의 두 가지 버전이 있는데 하나는 네 개의 인수를 사용하고 다른 하나는 다섯 개를 인수합니다. 왜 컴파일러는 두 번째 버전을 사용하려고합니까? same는 템플릿 기능이 있기 때문에, 유효한 UnaryOperator 아니기 때문에 그건 그렇고, 내가 VS2008transform()은 몇 개의 인수가 필요합니까?

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 
+1

왜'std :: copy'를 사용하지 않으시겠습니까? –

+0

Stroustrup의 책에서 본 한 예입니다. 시도하고 싶습니다. – ubbdd

+0

예제가 잘못되어,'same'은 유효한 것이 아닙니다. –

답변

3

을 사용하고 있습니다. &

선택 사항입니다

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

주 또는 당신은 다형성 함수 객체로 same를 만들 수 있습니다 : 당신이 대신 뭔가를 원하는

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

을하고 UnaryOperator으로 same()를 사용합니다.

관련 문제