作为类作业的一部分,我们正在阅读 Herb Sutter 的 Exceptional C++ 一书。
我对理解 typedef 实际在做什么和破译有疑问 它是如何构造的:第 36 项:
如果有人了解 typefef 的逻辑,这将是一个很大的帮助。
class B
{
public:
virtual ~B();
void operator delete (void*, size_t) throw();
void operator delete[] (void*, size_t) throw();
void f(void*, size_t) throw();
}
class D : public B
{
public:
void operator delete (void*) throw();
void operator delete[] (void*) throw();
};
typedef void (B::*PMF)(void*, size_t);
PMF p1 = &B::f;
PMF p2 = &B::operator delete;
由于 B 类(PMF)中没有指向成员函数的指针, 什么是 PMF,它是如何创建的?
void 是 typedef 的返回类型吗? (void* 和 size_t) 是 typedef 的参数吗?
谢谢
最佳答案
typedef
关键字为现有类型声明一个别名。
例如
typedef int integral;
integral i = 1;
typedef void (B::*PMF)(void*, size_t);
行声明了一个类型的别名 PMF
:函数指针 (这是一个指针指向 void
和 size_t
) 返回 void
.
有关如何使用螺旋规则从复杂声明中解释类型的详细说明,请参阅此链接:The Clockwise/Spiral Rule
PMF
是该类型的别名。它可用于声明指向作为 B 成员且具有相同参数列表和返回类型的任何函数的指针。
PMF p1 = &B::f; // Declare p1 as a PMF and set it to point to address of B::f.
B b; // Create instance of B (needed as p1 points to a member function).
(b.*p1)(nullptr, 0); // Here p1 can be used as if it was a call to B::f.
关于c++ - 出色的 C++ 项目 36,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18038957/