如何使用 C++11 语法对方法指针进行类型定义?

How do I typedef a method pointer with the C++11 using syntax?

我想写这个

class A {
   ...
};
typedef void (A::*MethodPtr)();

使用 using。我该怎么做?

使用和不使用 type_traits

的答案将不胜感激

(常规函数的答案可以在这里找到:How do I typedef a function pointer with the C++11 using syntax?

using MethodPtr = void (A::*)();

实际上非常类似于函数指针。

using MethodPtr = void (A::*)();

<type_traits> 中没有任何内容对此处有直接帮助(您可以从指向成员函数的指针转到函数,但不能反过来)。但是我们可以编写自己的成员版本 add_pointer:

template <class C, class T>
using mem_ptr_t = T C::*;

因此创建一个指向 A 的指针,它是类型 void() 的函数只是:

using MethodPtr = mem_ptr_t<A, void()>;

这比简单的方法更冗长,但既然你问了!