티스토리 뷰

 람다 함수와 함께 auto 를 사용하는 것은 매우 고무적인 일이다. 다음과 같이 말이다.

auto f = [](auto x) { return normalize(x); };

이 람다 함수는 컴파일러에 의해 다음과 같은 클로저 클래스가 생성된다.

class 컴파일러가_생성한_클래스 {
public:
  template<typename T>
  auto operator()(T x) const
  { return normalize(x); }
  ...
};

이제 문제가 생기는 것은 xnormalize 에 완벽 전달을 하고 싶어지면 어떻게 해야할까?

auto f = [](auto&& x)
         { return normalize(std::forward<???>(x)); };

???에 적어야할 타입은 무엇일까? 우리는 항목3에서 배운 decltype 을 사용하면 된다.

 

[Effective Modern C++] 항목 3. decltype의 작동 방식을 숙지하라

decltype 이라는 키워드는 객체가 주어졌을때, 그 객체의 타입을 알려준다. 예시를 보자. const int i = 0; // decltype(i)는 const int MyClass object; // decltype(object)는 MyClass 위와 같이 객체의 타입을..

pppgod.tistory.com

다음과 같이 사용하면 된다.

auto f = [](auto&& x)
         {
           return 
             normalize(std::forward<decltype(x)>(x));
         };

 

참고 서적

스콧 마이어스, Effective Modern C++
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함