C++模板std::is_member_function_pointer及示例
C++ STL中的 std::is_member_function_pointer 模板存在于
所属头文件:
#include <type_traits>
模板类:
template <class T>
struct is_member_function_pointer;
语法:
std::is_member_function_pointer::value
参数: 模板 std::is_member_function_pointer 接受一个参数 T(特征类) ,以检查 T 是否为非静态成员函数的指针。
返回值: 此模板 std::is_member_function_pointer 返回一个布尔变量,如下所示:
- True: 如果类型 T 是指向非静态成员函数类型的指针。
- False: 如果类型 T 不是指向非静态成员函数类型的指针。
以下是在C++中演示 std::is_member_function_pointer 的程序:
程序1:
// C ++程序说明
// std::is_member_function_pointer
#include <bits/stdc++.h>
#include <type_traits>
using namespace std;
//声明一个结构体
class GFG {
public:
int gfg;
};
class A {
};
//主要代码
int main()
{
//对象分类GFG
int GFG :: * pt = & GFG :: gfg;
cout << boolalpha;
//检查GFG *是否为成员函数指针
cout <<“GFG *:”
<< is_member_function_pointer< GFG * & gt; :: value
<< endl;
//检查int GFG :: *是否为成员函数指针
cout <<“int GFG :: *”
<< is_member_function_pointer< int GFG :: * & gt; :: value
<< endl;
//检查int A :: *是否为成员函数指针
cout <<“int A :: *”
<< is_member_function_pointer< int A :: * & gt; :: value
<< endl;
//检查int A :: *()是否为成员函数指针
cout <<“int A :: *()”
<< is_member_function_pointer< int(A :: *)()& gt; :: value
<< endl;
return 0;
}
GFG *:false
int GFG :: * false
int A :: * false
int A :: *()true
程序2:
// C++程序来说明
// std::is_member_function_pointer
#include <bits/stdc++.h>
#include <type_traits>
using namespace std;
// 声明一个结构
struct A {
void fn(){};
};
struct B {
int x;
};
// 主函数
int main()
{
void (A::*pt)() = &A::fn;
cout << boolalpha;
cout << "A*: "
<< is_member_function_pointer<A*>::value
<< endl;
cout << "void(A::*)(): "
<< is_member_function_pointer<void (A::*)()>::value
<< endl;
cout << "B*: "
<< is_member_function_pointer<B*>::value
<< endl;
cout << "void(B::*)(): "
<< is_member_function_pointer<void (B::*)()>::value
<< endl;
return 0;
}
A*: false
void(A::*)(): true
B*: false
void(B::*)(): true
引用: http://www.cplusplus.com/reference/type_traits/is_member_function_pointer/