我刚刚发现了一些C ++代码(在 http://msdn.microsoft.com/en-us/library/k8336763(VS.71).aspx ),它使用我以前从未见过的技术将类型添加到现有类:

class Testpm {
public:
   void m_func1() { cout << "m_func1\n"; }
   int m_num;
};

// Define derived types pmfn and pmd.
// These types are pointers to members m_func1() and m_num, respectively.
void (Testpm::*pmfn)() = &Testpm::m_func1;
int Testpm::*pmd = &Testpm::m_num;

int main() {
   Testpm ATestpm;
   Testpm *pTestpm = new Testpm;

   // Access the member function
   (ATestpm.*pmfn)();
   (pTestpm->*pmfn)();   // Parentheses required since * binds

   // Access the member data
   ATestpm.*pmd = 1;
   pTestpm->*pmd = 2;

   cout  << ATestpm.*pmd << endl
         << pTestpm->*pmd << endl;
}

有人可以告诉我这种用于定义派生类型的技术是什么被调用,或者指向我的一些文档?我在使用C ++的13年里从未遇到过它,并且想结束我的无知。

有帮助吗?

解决方案

评论不正确:pmfn和pmd不是<!>“派生类型<!>”;在所有(他们甚至不是类型!)。它们是

其他提示

我不认为他们是<!>“;添加类型<!>”;上课。它们似乎只是定义了指向成员函数和类成员数据的指针类型,然后使用它们来访问成员函数和数据成员。类似于如何向非成员函数声明类型,但作为类的成员,语法不同。

从此网站此处

  

关于它们的语法,有两个   不同类型的函数指针:   一方面有指针   普通的C函数或静态C ++   成员职能。另一方面   有非静态C ++的指针   成员职能。基本的区别   就是所有指向非静态的指针   成员函数需要隐藏   参数:this指针指向   班级的实例。永远留在   记:这两种功能   指针与每个指针不兼容   其他

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top