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_类型;
      };
      
      为什么指向成员的“指针”不是“指针”?它没有意义。“指针”是内存中某个对象(或函数)的地址。指向成员的指针不是。它是查找子对象(或成员函数)地址所必需的信息给定一个指向父对象的指针。没有父对象,就没有子对象,也没有指针。为什么指向成员的“指针”不是“指针”?它没有意义。“指针”是内存中某个对象(或函数)的地址。指向成员的指针不是。它是查找子对象地址所必需的信息(或成员函数)给定指向父对象的指针。没有父对象,就没有子对象,也没有指针。