본문 바로가기
C++

[C++ Core Guidelines] I.9 템플릿으로 만든 인터페이스는 concepts 문법을 사용해서 구체화하자

by 코드쉼터 2024. 7. 5.

I.9: If an interface is a template, document its parameters using concepts

 

이유

인터페이스를 구체적으로 작성하여 컴파일 타임에 조건을 검사할 수 있도록 만드는 것이 좋습니다.

 

 

예시 (좋은 예)

// C++20
template<typename Iter, typename Val>
  requires input_iterator<Iter> && equality_comparable_with<iter_value_t<Iter>, Val>
Iter find(Iter first, Iter last, Val v)
{
    // ... 대략 이터레이터의 first 에서 last 까지 탐색하면서 v 값을 검출하는 코드 ...
}

Generic porgammingConcepts 문법에 대한 내용을 참고할 수 있습니다.

 

 

정리

1. requires 문법을 이용하면 템플릿 파라미터에 조건을 나타내 컴파일 타임에 검사할 수 있습니다. (코드의 문서화)

2. input_iterator<Iter>: Iter 타입이 반드시 반복자여야 함을 코드로 직접 표현할 수 있습니다.
3. equality_comparable_with<iter_value_t<Iter>, Val>: 반복자가 가리키는 값의 타입 (iter_value_t<Iter>) 과 Val 타입이 서로 비교 가능해야 (== 연산을 사용할 수 있어야) 함을 코드로 직접 표현할 수 있습니다.