【发布时间】:2010-12-11 05:18:33
【问题描述】:
我刚刚找到了一些 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。以及诸如 ATestpm.*pmd = 1 之类的行;这表明“pmd”已添加到类 Testpm 中。这些是促使我提出问题的原因,也是我的措辞方式。现在查看代码,借助目前提供的答案,我可以看到 pmd 和 pmfn 被定义为指向 Testpm 内部成员的指针。事实上,它们是指向类而不是对象的指针,以及可以从 Testpm 对象访问它们的方式,这让我感到困惑,因为我不记得以前见过这种情况。
-
它们是指向类成员的指针。 'pmfn':指向成员函数的指针,'pmd':指向成员数据的指针。这些概念在 STL 的算法中被大量使用,尽管这些概念并未暴露给 STL 的用户。
标签: c++ derived-types