오보에블로그
[C++20] Concepts library 본문
728x90
[C++20] Concepts library
- cpp 레퍼런스 홈페이지 에서 확인이 가능하다.
Concepts
에 관한 내용은 이전 포스트 를 참고 바란다.
std::same_as
- 또다른 타입과 서로 같은 타입인지
- 구현부
namespace detail {
template< class T, class U >
concept SameHelper = std::is_same_v<T, U>;
}
template< class T, class U >
concept same_as = detail::SameHelper<T, U> && detail::SameHelper<U, T>;
- 사용 예시
template<typename T, typename U>
void func(T t, U u) requires std::same_as<int,int> // 같은 타입으로 안쓰면 오류는 안나오나, 호출시 통과가 안된다.
{
}
func(3,1); // pass
func(3,1.5f); // error
std::derived_from
- 상속 받은 타입에 대한 제약 조건
- 구현부
template< class Derived, class Base >
concept derived_from =
std::is_base_of_v<Base, Derived> &&
std::is_convertible_v<const volatile Derived*, const volatile Base*>;
- 사용 예시
class Parent { };
class Child : public Parent { }; // Parent 상속
template<typename T>
requires derived_from<T, Parent> // Parent로부터 파생된 T로만 받을 것이다.
void TestObj(T* obj)
{
}
Child* c = new Child();
TestObj(c); // pass
TestObj(314); // error
std::equality_comparable
==
연산자가 구현이 되어 있는지
728x90
'C++ & C# > Modern C++' 카테고리의 다른 글
[C++20] Range (0) | 2022.01.31 |
---|---|
[STL] STL 알고리즘 정리 (0) | 2022.01.31 |
[C++20] Concept (0) | 2022.01.30 |