반응형
Concept의 개념
- 일반적으로 함수 템플릿(또는 클래스 템플릿)은 모든 타입이 아니라 특정 조건을 만족하는 타입에 대해서 동작하게 됨
- 타입이 가져야 하는 조건을 코드로 표현 한 것
- 2000년 중반부터 이야기 되었으나 아직 표준화 되지 않음
- C++20 표준에 추가될 예정
- Concept 문법이 도입될 경우 템플릿 코드에 많은 변화가 있게됨
#include <iostream>
using namespace std;
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);
}
#include <iostream>
using namespace std;
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;
};
// 2. template 만들때 concept 표기
template<typename T> requires LessThanComparable<T>
T Min(T x, T y)
{
return y < x ? y : x;
}
// 3. template 만들때 T대신 concept 사용
LessThanComparable Min(LessThanComparable x, LessThanComparable y)
{
return y < x ? y : x;
}
int main()
{
Point p1, p2;
Min(p1, p2);
}
반응형
'프로그래밍 언어 > C++' 카테고리의 다른 글
C++ 템플릿 디자인 Typelist (0) | 2021.01.10 |
---|---|
C++ 템플릿 디자인 Member Detect IDioms (0) | 2021.01.10 |
C++ 템플릿 디자인 SFINAE(Substitution Failure Is Not An Error) (0) | 2021.01.10 |
C++ 템플릿 디자인 단위 전략(Policy-Based Design) (0) | 2021.01.09 |
C++ 템플릿 디자인 패턴 CRTP 활용 (0) | 2021.01.08 |