[ C++ 20 ] Concept

Minsu._.Lighting·2024년 2월 1일
0

📔 [ Modern C++ / C# ]

목록 보기
1/8

💡 Concept를 사용하는 이유?

  • C#에서는 클래스 / 함수에 where절을 사용해 제네릭 타입에 대해 조건을 부여해 줄수 있다.
class GameObject
{
	public int iObjectID;
}

class Player : GameObject
{

}

class Monster : GameObject
{

}


void SetObjectID<T>(T obj)
{
	// 여러 자료형을 매개변수로 받기 위해
    // 제네릭 타입으로 만들었지만 이렇게 만들 경우
    // iObjectID를 변수로 갖고있지 않는 타입의 경우 오류가 발생한다.
    
	int iObjectID = obj.iObjectID;
    ...
    ...
}

void SetObjectID<T>(T obj) where T : GameObject
{
	// where절을 이용해 GameObject를 상속받는 타입으로만 조건을 부여해주면 해결.
    
	int iObjectID = obj.iObjectID;
    ...
    ...
}

📢 위 C# 문법과 같이 C++에서도 어떤 타입이 가져야하는 조건을 정의해 주기 위해 나온 것이 Concept라고 할 수 있다!
- 사용 방법은 여러가지가 있다.
- 정해준 제약 조건들은 컴파일 타임에 결정되어진다.



💡 Concept 사용 예시!

  • 매개변수로 들어오는 값을 정수만 받고 싶은 상황

📌 1. Requires Clause

  • requires 절 사용
    - std::integral : 정수 타입
    - std::floating point : 실수 타입

📌 2. Trailing Requires Clause

  • 1번과 마찬가지로 requires 절을 사용했지만 함수의 뒤에 붙인다.
    - Trailing : 뒤에 붙는~

📌 3. Constrained Template Parameter

  • 타입을 강제한다.
    - template<std::integral T> T에 대해 타입을 integral로 강제
    - Constrained : 강제하는

📌 4. Abbreviated Function Template

  • auto 키워드를 사용해 정수 타입인 타입만을 추론해 사용.
profile
오코완~😤😤

0개의 댓글

관련 채용 정보