C++ 已删除的指向函数成员的指针的类型
类型:C++ 已删除的指向函数成员的指针的类型,c++,c++11,function-pointers,C++,C++11,Function Pointers,类型: std::remove_pointer<int(*)(int)>::type 打印“真”。但是,“功能成员”的(书面)类型是什么 #包括 #包括 使用名称空间std; 结构A{}; int main() { cout指向成员的指针不是指针 删除\u指针不会更改类型 演示: 指向成员的指针不是指针 删除\u指针不会更改类型 演示: 它是这样的:非成员类型要么是对象类型,要么是函数类型: T = int; // object type T =
std::remove_pointer<int(*)(int)>::type
打印“真”。但是,“功能成员”的(书面)类型是什么
#包括
#包括
使用名称空间std;
结构A{};
int main()
{
cout指向成员的指针不是指针
删除\u指针
不会更改类型
- 演示:
指向成员的指针不是指针
删除\u指针
不会更改类型
- 演示:
它是这样的:非成员类型要么是对象类型,要么是函数类型:
T = int; // object type
T = double(char, bool) // function type
对于非静态类成员,只能有指向成员类型的指针。其形式如下:
class Foo;
PM = U Foo::*; // pointer to member type
问题是U
是什么:
U = int => PM = int Foo::* // pointer-to-member-object
U = double(char, bool) => PM = double (Foo::*)(char, bool) // pointer-to-member-function
“指向成员的指针”不是指针,因此您无法从中“删除指针”。您最多可以获得底层类型,即从PM=U Foo::*
到U
。据我所知,不存在此类特征,但很容易捏造:
template <typename> struct remove_member_pointer;
template <typename U, typename F> struct remove_member_pointer<U F::*>
{
typedef U member_type;
typedef F class_type;
};
模板结构删除\成员\指针;
模板结构删除\u成员\u指针
{
类型定义U成员类型;
类型定义F class_类型;
};
它是这样的:非成员类型要么是对象类型,要么是函数类型:
T = int; // object type
T = double(char, bool) // function type
对于非静态类成员,只能有指向成员类型的指针。其形式如下:
class Foo;
PM = U Foo::*; // pointer to member type
问题是U
是什么:
U = int => PM = int Foo::* // pointer-to-member-object
U = double(char, bool) => PM = double (Foo::*)(char, bool) // pointer-to-member-function
“指向成员的指针”不是指针,因此您无法从中“删除指针”。您最多可以获得底层类型,即从PM=U Foo::*
到U
。据我所知,不存在此类特征,但很容易捏造:
template <typename> struct remove_member_pointer;
template <typename U, typename F> struct remove_member_pointer<U F::*>
{
typedef U member_type;
typedef F class_type;
};
模板结构删除\成员\指针;
模板结构删除\u成员\u指针
{
类型定义U成员类型;
类型定义F class_类型;
};
为什么指向成员的“指针”不是“指针”?它没有意义。“指针”是内存中某个对象(或函数)的地址。指向成员的指针不是。它是查找子对象(或成员函数)地址所必需的信息给定一个指向父对象的指针。没有父对象,就没有子对象,也没有指针。为什么指向成员的“指针”不是“指针”?它没有意义。“指针”是内存中某个对象(或函数)的地址。指向成员的指针不是。它是查找子对象地址所必需的信息(或成员函数)给定指向父对象的指针。没有父对象,就没有子对象,也没有指针。