(C++ : Template) concept

Posted by : at

Category : Cpp


struct Point
{
    int x, y;
};

template<typename T> T Min(T x, T y)
{
    return y < x ? y : x;
}

int main()
{
    Point p1, p2;
    Min(p1, p2);        // error - Point는 크기비교가 불가능
    // 해결해보자
}
  • Concept를 활용!
    • 타입이 가져야 하는 조건을 코드로 표현하는 것을 말한다.
    • Concept은 C++20에 도입이 될 예정이다.
struct Point
{
    int x, y;
    bool operator<(const Point& p) { return true; }
};

// 1. concept만들기
template<typename T>
concept bool LessThanComparable = requires(T a, T b)
{
    { a < b } -> bool;
    // 비교연산이 가능하고 bool을 리턴할수 있어야한다.
};

// T는 LessThanComparable를 만족해야 사용이 가능하다.
template<typename T> requires LessThanComparable
T Min(T x, T y)
{
    return y < x ? y : x;
}

int main()
{
    Point p1, p2;
    Min(p1, p2);
}
// 2. template 만들때 concept 표기
// T자리 대신에 concept을 넣는다
LessThanCompare Min(TLessThanCompare x, LessThanCompare y)
{
    return y < x ? y : x;
}

About Taehyung Kim

안녕하세요? 8년차 현업 C++ 개발자 김태형이라고 합니다. 😁 C/C++을 사랑하며 다양한 사람과의 협업을 즐깁니다. ☕ 꾸준한 자기개발을 미덕이라 생각하며 노력중이며, 제가 얻은 지식을 홈페이지에 정리 중입니다. 좀 더 상세한 제 이력서 혹은 Private 프로젝트 접근 권한을 원하신다면 메일주세요. 😎

Star
Useful Links