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라고 할 수 있다!
- 사용 방법은 여러가지가 있다.
- 정해준 제약 조건들은 컴파일 타임에 결정되어진다.
std::integral
: 정수 타입std::floating point
: 실수 타입template<std::integral T>
T에 대해 타입을 integral로 강제