types_is_member_object_pointer (멤버 객체 포인터 여부를 판별하는 타입 특성)
이 페이지에서는 C++ 표준 라이브러리의 std::is_member_object_pointer 타입 특성에 대해 설명해요. 이 타입 특성은 주어진 타입이 비정적 멤버 객체 포인터인지 아닌지를 컴파일 타임에 판별해요. value 멤버 상수를 통해 결과를 제공하며, C++17부터는 _v 변수 템플릿도 사용할 수 있어요.
출처: cppreference
본문
개요
std::is_member_object_pointer는 단항 타입 특성(UnaryTypeTrait)이에요. T가 비정적 멤버 객체 포인터인지 확인해요. T가 비정적 멤버 객체 포인터 타입이면 value 멤버 상수가 true와 같고, 그렇지 않으면 value는 false와 같아요.
프로그램에서 std::is_member_object_pointer 또는 std::is_member_object_pointer_v에 특수화를 추가하면 동작이 정의되지 않아요.
템플릿 매개변수
헬퍼 변수 템플릿
| template < class T > constexpr bool is_member_object_pointer_v = is_member_object_pointer < T >:: value ; |
(since C++17) |
std::integral_constant에서 상속됨
멤버 상수
| value [static] |
T가 멤버 객체 포인터이면 true, 그렇지 않으면 false (공용 정적 멤버 상수) |
멤버 함수
| operator bool |
객체를 bool로 변환하고 value를 반환해요 (공용 멤버 함수) |
| operator() (C++14) |
value를 반환해요 (공용 멤버 함수) |
멤버 타입
| 타입 |
정의 |
| value_type |
bool |
| type |
std :: integral_constant < bool , value > |
가능한 구현
| template < class T > struct is_member_object_pointer : std :: integral_constant < bool , std :: is_member_pointer < T >:: value && ! std :: is_member_function_pointer < T >:: value > {}; |
예제
#include <iostream>
#include <type_traits>
int main()
{
class C {};
std::cout << "Is member object pointer?\n" << std::boolalpha
<< std::is_member_object_pointer_v<int(C::*)>
<< ": int(C::*)\n"
<< std::is_member_object_pointer_v<int(C::*)()>
<< ": int(C::*)()\n";
}
출력:
Is member object pointer?
true: int(C::*)
false: int(C::*)()
같이 보기
| is_pointer (C++11) |
타입이 포인터 타입인지 확인해요 (클래스 템플릿) |
| is_member_pointer (C++11) |
타입이 비정적 멤버 함수 또는 객체에 대한 포인터인지 확인해요 (클래스 템플릿) |
| is_member_function_pointer (C++11) |
타입이 비정적 멤버 함수 포인터인지 확인해요 (클래스 템플릿) |
| is_member_object_pointer_type (C++26) |
리플렉션이 멤버 객체 포인터 타입을 나타내는지 확인해요 (함수) |
더 알아보기 (Learn more)
cppreference
원문(English source):
| Defined in header <type_traits> |
|
|
| template < class T > struct is_member_object_pointer ; |
|
(since C++11) |
| std::is_member_object_pointer is a UnaryTypeTrait . |
|
|
T가 비정적 멤버 객체 포인터인지 검사해요. T가 비정적 멤버 객체 포인터 타입이면 멤버 상수 value는 true, 아니면 false예요.
프로그램이 std::is_member_object_pointer나 std::is_member_object_pointer_v에 특수화를 추가하면 동작이 정의되지 않아요.
Template parameters
Helper variable template
| template < class T > constexpr bool is_member_object_pointer_v = is_member_object_pointer < T >:: value ; |
|
(since C++17) |
Inherited from std:: integral_constant
Member constants
| value [static] |
true if T is a pointer to member object, false otherwise (public static member constant) |
Member functions
| operator bool |
converts the object to bool , returns value (public member function) |
| operator() (C++14) |
returns value (public member function) |
Member types
| Type |
Definition |
| value_type |
bool |
| type |
std :: integral_constant < bool , value > |
Possible implementation
| template < class T > struct is_member_object_pointer : std :: integral_constant < bool , std :: is_member_pointer < T >:: value && ! std :: is_member_function_pointer < T >:: value > {}; |
Example
#include <iostream>
#include <type_traits>
int main()
{
class C {};
std::cout << "Is member object pointer?\n" << std::boolalpha
<< std::is_member_object_pointer_v<int(C::*)>
<< ": int(C::*)\n"
<< std::is_member_object_pointer_v<int(C::*)()>
<< ": int(C::*)()\n";
}
Output:
Is member object pointer?
true: int(C::*)
false: int(C::*)()
See also
| is_pointer (C++11) |
checks if a type is a pointer type (class template) [edit] |
| is_member_pointer (C++11) |
checks if a type is a pointer to a non-static member function or object (class template) [edit] |
| is_member_function_pointer (C++11) |
checks if a type is a non-static member function pointer (class template) [edit] |
| is_member_object_pointer_type (C++26) |
checks if reflection represents a member object pointer type (function) [edit] |