이 람다 함수를 다시 쓰는 방법을 생각해보십시오. pre C++ 11?람다 함수 C++ 11
if (maxVol != 0)
std::transform(&spec[0], &spec[sampleSize], &spec[0]
, [maxVol] (float dB) -> float { return dB/maxVol; });
감사
이 람다 함수를 다시 쓰는 방법을 생각해보십시오. pre C++ 11?람다 함수 C++ 11
if (maxVol != 0)
std::transform(&spec[0], &spec[sampleSize], &spec[0]
, [maxVol] (float dB) -> float { return dB/maxVol; });
감사
하나로서 maxVol 걸리는 술어 (C++ (11) 우리가 바인딩을 사용)에 사용 bind1st 및 bind2nd에서입니다 그 입력의
maxVol에 대한 멤버 변수를 가질 수있는 함수 개체를 만듭니다. 연산자()를 오버로드하여 이것을 술어로 전달하십시오.
망하는 코드 :
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
에 똑같은 비트를 가지고있었습니다.
'FrequencyAnalysis :: DrawScene() :: percent_of'에는 'maxVol'이라는 필드가없고 함수를 포함하는 변수가 'auto'변수로 사용됩니다. 그것은 std :: transform 내부의 함수를 인식하지 못합니다. 어떤 도움이라도 대단히 감사하겠습니다. – JasperK
첫 번째는 'maxVol'이라는 이름의 오타가 원인이었고 두 번째는 실제로 '나누기'를 인스턴스화하는 것을 잊어서 발생했습니다. 나는 그것들을 바로 잡았다. 세 번째 오류는 처음 두 개에 불과하지만 코드는 단지 지침이 아닌 현재 작동합니다. http://coliru.stacked-crooked.com/a/8d8b42fa15ad94ba –
죄송합니다. ''호출에 일치하는 함수가 없습니다. '(float *, float *, float *, FrequencyAnalysis :: DrawScene() :: percent_of) ' – JasperK