INDIES
std::bind보단 람다C++11에서 거의 대부분의 경우 std::bind보다는 람다 표현식을 쓰는 것이 더 좋은 선택이다. 람다의 기능이 대폭강화된 C++14 역시 마찬가지고. 그 이유에는 여러 가지가 있지만, 우선 가장 첫번째는 가독성이다. std::bind를 이용해 작성된 코드보다 람다 표현식으로 작성된 코드의 가독성이 더 뛰어나다.using Time = std::chrono::steady_clock::time_point; enum class Sount { Beep, Siren, Whistle }; using Duration = std::chrono::steady_clock::duration; //타임 t가 되면 d 시간동안 s 소리를 냄 void SetAlarm(Time t, Sound s, D..
auto&&를 std::forward할 땐 decltypeC++ 14에 추가된 generic lambda라는 기능은 람다의 매개변수 정의에 auto를 쓸 수 있게 해주는 굉장히 흥미로운 기능이다. 이 기능의 구현은 람다의 클로져 클래스 내부 멤버 함수 operator()를 템플릿으로 만드는 것으로 이루어진다.auto f = [](auto x){ return func(normalize(x)); }; //내부 클로져 클래스의 구현 class Closure { public: template auto operator()(T x) const { return func(normalize(x)); } }위 예제에서 람다는 단순히 인자 x를 normalize로 전달해주는 역할만을 한다. 이 때 normalize 함수의 ..
move에는 init capture가끔 by-value 캡쳐도, by-reference 캡쳐도 마음에 안 들 때가 있다. move-only 객체(std::unique_ptr이나 std::future 등)를 클로져 내부로 이동시키고 싶은 경우가 바로 그런 경우인데, 문제는 C++11은 이런 경우에 대한 방법을 지원하지 않는다. 클로져 내부로 복사는 비싸지만 이동은 싼(vector 같은 컨테이너) 객체를 이동시키고 싶은 경우에도 마찬가지로 C++11에서는 언어적 차원의 기능 지원이 없다. 하지만 C++14는 다르다. C++14에서는 이런 경우에 클로져 내부로 객체를 이동시키는 방법을 제공한다.init captureC++14에 추가된 init capture 기능을 이용하면 외부의 객체를 클로져 내부로 이동시킬..