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 porgamming 과 Concepts 문법에 대한 내용을 참고할 수 있습니다.
정리
1. requires 문법을 이용하면 템플릿 파라미터에 조건을 나타내 컴파일 타임에 검사할 수 있습니다. (코드의 문서화)
2. input_iterator<Iter>: Iter 타입이 반드시 반복자여야 함을 코드로 직접 표현할 수 있습니다.
3. equality_comparable_with<iter_value_t<Iter>, Val>: 반복자가 가리키는 값의 타입 (iter_value_t<Iter>) 과 Val 타입이 서로 비교 가능해야 (== 연산을 사용할 수 있어야) 함을 코드로 직접 표현할 수 있습니다.
'C++' 카테고리의 다른 글
[C++ Core Guidelines] I.11 원시 포인터(T*) 또는 참조(T&) 로 소유권을 넘기지 말자 (0) | 2024.12.10 |
---|---|
[C++ Core Guidelines] I.10 예외를 사용해 필수 작업의 실패를 알리자 (0) | 2024.09.12 |
[C++ Core Guidelines] I.7, I.8 완료 조건을 명시하자 (0) | 2024.05.27 |
[C++ Core Guidelines] I.5, I.6 전제 조건을 명시하자 (0) | 2024.05.17 |
[C++ Core Guidelines] I.4 명확한 타입을 사용해서 인터페이스를 만들자 (0) | 2024.05.09 |