代码之家  ›  专栏  ›  技术社区  ›  Charles Anderson

这个C++技术是如何将类型添加到一个被调用的类中的?

  •  4
  • Charles Anderson  · 技术社区  · 15 年前

    我刚刚找到了一些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年中从未遇到过这样的问题,希望结束我的无知。

    2 回复  |  直到 15 年前
        1
  •  6
  •   user200783    15 年前

    注释不正确:pmfn和pmd根本不是“派生类型”(它们甚至不是类型!)它们是 pointers to members .

        2
  •  4
  •   pxb    15 年前

    我不认为他们在给班级“添加类型”。它们似乎只是定义指向类的成员函数和成员数据的指针类型,然后使用这些指针访问成员函数和数据成员。类似于如何向非成员函数声明类型,但是作为类的成员,语法不同。

    从此网站 here

    关于它们的语法,有两个 不同类型的函数指针: 一方面有指向 普通C函数或静态C++ 成员函数。另一方面 有指向非静态C++的指针 成员函数。基本区别 所有指向非静态的指针 成员函数需要隐藏 参数:指向 类的实例。始终保持 注意:这两种功能 指针与每个指针都不兼容 其他。

    推荐文章