2017-01-27 1 views
-1

전화에서 호출지고 어떻게 오버로드 된 데이터 타입 :펑에 펑

펑 CalculateAverage를 호출하는 코드 위
double average=std::for_each(values.begin(),values.end(),CalculateAverage()); 

,

하지만 "무효 연산자() (더블 ELEM)"의 내부에서

, "operator double() const"가 호출됩니다.

펑은 다음과 같이 정의된다 :

class CalculateAverage 
{ 
private: 
    std::size_t num; 
    double sum; 
public: 

    CalculateAverage() : num (0) , sum (0) 
    { 
    } 

    void operator() (double elem) 
    { 
     num++; 
     sum += elem; 
    } 

    operator double() const 
    { 
     return sum/num; 
    } 
}; 
+0

진정해. 그리고 당신의 문제 (질문)를 명확하게 전달하려고 시도하십시오 – WhiZTiM

+0

[docs] (http://en.cppreference.com/w/cpp/algorithm/for_each)를 읽으려고 했습니까? – LogicStuff

+0

미안하지만, 나는이 선언 "operator double() const"가 호출되고 누가 그것을 호출하는지 – commanche

답변

0

어떻게 두 번 호출지고?

std::for_each은 function 개체를 반환합니다.

는 일반적으로이 같이 이루어집니다 :

CalculateAverage average=std::for_each(values.begin(),values.end(),CalculateAverage()); 

그러나 귀하의 경우 average 때문에 클래스에 존재하는 과부하 double로 변환됩니다.

변환 연산자를 제공하여 제공합니다.

0

방법 및 이중() const를 호출지고?

과부하 std::for_each 사용중인 반환 펑터를 세 번째 매개 변수로 전달했습니다. 반환 될 때 컴파일러는 사용자 정의 변환을 적용합니다. 귀하의 경우 그것은 내재적이므로 캐스트 할 필요가 없습니다.

당신은 그것을 명시 할 수 있습니다, 당신은 두 번에 결과를 캐스팅해야합니다 :

explicit operator double() const 

과 :() CONST는

double average=static_cast<double>(std::for_each(values.begin(),values.end(),CalculateAverage()));