다른cpp프로젝트소스 구경하다보니 [&]연산자가 있던데
정확한 정의나 설명된곳 주소를 알고계신분은 도움바랍니다.
구글검색으로 안되네요.
pImpl->ForEachGlyph(text, [&](Glyph const* glyph, float x, float y)
{
float w = (float)(glyph->Subrect.right - glyph->Subrect.left);
float h = (float)(glyph->Subrect.bottom - glyph->Subrect.top) + glyph->YOffset;
h = std::max(h, pImpl->lineSpacing);
result = XMVectorMax(result, XMVectorSet(x + w, y + h, 0, 0));
});
문맥을 보면 무슨뜻인지는 알겠는데, 정확한 정의를 모르겠습니다.
잘모르시는 분들은 아래함수를 보시면 문맥흐름은 알수있을겁니다...
// The core glyph layout algorithm, shared between DrawString and MeasureString.
template<typename TAction>
void SpriteFont::Impl::ForEachGlyph(_In_z_ wchar_t const* text, TAction action)
{
float x = 0;
float y = 0;
for (; *text; text++)
{
wchar_t character = *text;
switch (character)
{
case '\r':
// Skip carriage returns.
continue;
case '\n':
// New line.
x = 0;
y += lineSpacing;
break;
default:
// Output this character.
auto glyph = FindGlyph(character);
x += glyph->XOffset;
if (x < 0)
x = 0;
if ( !iswspace(character)
|| ( ( glyph->Subrect.right - glyph->Subrect.left ) > 1 )
|| ( ( glyph->Subrect.bottom - glyph->Subrect.top ) > 1 ) )
{
action(glyph, x, y);
}
x += glyph->Subrect.right - glyph->Subrect.left + glyph->XAdvance;
break;
}
}
}
답변주신분들 감사드립니다.
lambda function인데요 걍 해당 함수가 정의된 부분에 로컬변수를 레퍼런스로 넘김. =는 복사고요
헐 이게 C++ 코드임? 언제 람다식 지원하게됬지? c++이 자꾸 딴 언어가 되어가네..
헐 c++11에 생겼구나.. 좀 봐야겠다
캡춰란다.. ㅋㅋㅋ 아 미치긋다.. c++ 다시 봐야겠네..
[&]() { . . . } 외부의 모든 변수들을 레퍼런스로 가져온다. (함수의 Call - by - reference 를 생각)
그니까.. 저 클로저내부의 result 가 외부 변수인데, 그넘을 참조로 가져다 써서 값을 업데이트하는거네..
글고보니 코딩몬이 한줄로 다 설명해놨구낭.. ㅋㅋㅋ 진짜 C++ 많이 변했다
cpp11의 람다함수라는거였군요. 답변감사드립니다.
농사지으시면서 개발하시기 어려울거같은데..고생이 많네요