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란에 있으니 관심 있으면 보면 좋다.
C++은 도대체무얼하려는것인가! ㅠㅠ
효율과 뇌절 사이의 어딘가 같다 씹 ㅋㅋ
아니., 겪어봐서 필요한걸 알긴 하는 데 뭔가 결과물이 못생겨보이는데? - dc App
C++가 그렇죠 뭐
C가 못생긴건 태곳적의 진리인데요
C++ 개발자지만 이건 쵸큼... - dc App
이걸 어따가....음;;;