오보에블로그

[C++20] Concepts library 본문

C++ & C#/Modern C++

[C++20] Concepts library

(OBO) 2022. 1. 31. 00:51
728x90

[C++20] Concepts library

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