Deducing this (Proposal 링크: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2021/p0847r7.html)

혹시 디씨 시스템 때문에 https로 링크가 바껴서 올라갔다면 지우고 http로 바꿔줘야 들가진다


C++20까지는 멤버 함수가 받는 this parameter에 대해서 generic한 함수는 작성할 수 없었다.

즉, class를 작성할 때 getter같은 것을 구현하려면 코드는 사실상 같더라도 const와 non const 버전을 각각 작성해 주어야 했다.

아마 C++를 어느정도 써본 사람이라면 다들 경험해 본 적 있을것이다.

그나마 const와 non const case만 있으면 다행이지 cvref qualifier을 전부 고려해주려면 정말 짜증이 난다.

다행히 IDE의 기능을 이용하면 알아서 복붙생성이 되지만 code duplication 문제는 여전하고 const_cast등의 code duplication을 줄이는 trick들도 있지만, 다들 아무래도 좀 hack같아서 별로다.


예)

class foo {

public:

auto get() -> T& { return data; }

auto get() const -> const T& { return data; }

auto get() && -> T&& { return std::move(data); }

… 중략


private:

T data;

};


C++23부터는 deducing this를 이용해 hacky하지 않게 code duplication을 없앨 수 있다.


예)

class foo {

public:

template <typename Self>

auto get(this Self&& self) -> decltype(auto) { return std::forward<Self>(self).data; }


private:

T data;

};


이 외의 예시와 by value member function, CRTP단순화등의 다양한 응용들이 해당 proposal의 real-world examples란에 있으니 관심 있으면 보면 좋다.