2014-04-06 3 views

답변

0
  1. 하나로서 maxVol 걸리는 술어 (C++ (11) 우리가 바인딩을 사용)에 사용 bind1st 및 bind2nd에서입니다 그 입력의

  2. maxVol에 대한 멤버 변수를 가질 수있는 함수 개체를 만듭니다. 연산자()를 오버로드하여 이것을 술어로 전달하십시오.

  3. 부스트 람다.
5

망하는 코드 :

if (maxVol != 0) 
     std::transform(&spec[0], &spec[sampleSize], &spec[0], [maxVol] (float dB) -> float { return dB/maxVol; }); 

람다 :

012,393,550 : 전체 코드

struct percent_of { 
    //that lambda captures maxVol by copy when constructed 
    percent_of(float maxVol) : maxVol(maxVol) {} 
    //the lambda takes a "float dB" and returns a float 
    float operator()(float dB) const { return dB/maxVol; } 
private: 
    float maxVol; 
}; 

체 람다

[maxVol] (float dB) -> float { return dB/maxVol; } 

교체

그러나이 람다는 매우 간단하므로 표준 라이브러리에 내장되어 있습니다. Pre-C++ 11은 boost에 똑같은 비트를 가지고있었습니다.

+0

'FrequencyAnalysis :: DrawScene() :: percent_of'에는 'maxVol'이라는 필드가없고 함수를 포함하는 변수가 'auto'변수로 사용됩니다. 그것은 std :: transform 내부의 함수를 인식하지 못합니다. 어떤 도움이라도 대단히 감사하겠습니다. – JasperK

+0

첫 번째는 'maxVol'이라는 이름의 오타가 원인이었고 두 번째는 실제로 '나누기'를 인스턴스화하는 것을 잊어서 발생했습니다. 나는 그것들을 바로 잡았다. 세 번째 오류는 처음 두 개에 불과하지만 코드는 단지 지침이 아닌 현재 작동합니다. http://coliru.stacked-crooked.com/a/8d8b42fa15ad94ba –

+0

죄송합니다. ''호출에 일치하는 함수가 없습니다. '(float *, float *, float *, FrequencyAnalysis :: DrawScene() :: percent_of) ' – JasperK