Namespaces
Variants

std:: is_member_pointer

From cppreference.net
Metaprogramming library
Type traits
Type categories
(C++11)
(C++11) ( DR* )
is_member_pointer
(C++11)
Type properties
(C++11)
(C++11)
(C++14)
(C++11) (deprecated in C++26)
(C++11) ( until C++20* )
(C++11) (deprecated in C++20)
(C++11)
Type trait constants
Metafunctions
(C++17)
Supported operations
Relationships and property queries
Type modifications
Type transformations
(C++11) (deprecated in C++23)
(C++11) (deprecated in C++23)
(C++11)
(C++11) ( until C++20* ) (C++17)

Compile-time rational arithmetic
Compile-time integer sequences
Défini dans l'en-tête <type_traits>
template < class T >
struct is_member_pointer ;
(depuis C++11)

std::is_member_pointer est un UnaryTypeTrait .

Si T est un pointeur vers un membre objet non statique ou un pointeur vers une fonction membre non statique, fournit la constante membre value égale à true . Pour tout autre type, value est false .

Si le programme ajoute des spécialisations pour std::is_member_pointer ou std::is_member_pointer_v , le comportement est indéfini.

Table des matières

Paramètres du modèle

T - un type à vérifier

Modèle de variable d'assistance

template < class T >
constexpr bool is_member_pointer_v = is_member_pointer < T > :: value ;
(depuis C++17)

Hérité de std:: integral_constant

Constantes membres

value
[static]
true si T est un type pointeur vers membre, false sinon
(constante membre publique statique)

Fonctions membres

operator bool
convertit l'objet en bool , retourne value
(fonction membre publique)
operator()
(C++14)
retourne value
(fonction membre publique)

Types membres

Type Définition
value_type bool
type std:: integral_constant < bool , value >

Implémentation possible

template<class T>
struct is_member_pointer_helper : std::false_type {};
template<class T, class U>
struct is_member_pointer_helper<T U::*> : std::true_type {};
template<class T>
struct is_member_pointer : is_member_pointer_helper<typename std::remove_cv<T>::type> {};

Exemple

#include <cassert>
#include <type_traits>
static_assert(!std::is_member_pointer_v<int*>);
struct S
{
    int i{42};
    int foo() { return 0xF00; }
};
using mem_int_ptr_t = int S::*;
using mem_fun_ptr_t = int (S::*)();
static_assert(std::is_member_pointer_v<mem_int_ptr_t>);
static_assert(std::is_member_pointer_v<mem_fun_ptr_t>);
int main()
{
    S s;
    mem_int_ptr_t pm = &S::i;
    assert(s.i == s.*pm);
    mem_fun_ptr_t pmf = &S::foo;
    assert((s.*pmf)() == s.foo());
}

Voir aussi

(C++11)
vérifie si un type est un type pointeur
(modèle de classe)
vérifie si un type est un pointeur vers membre objet non statique
(modèle de classe)
vérifie si un type est un pointeur vers membre fonction non statique
(modèle de classe)