繁体   English   中英

从成员函数指针类型中删除类指针

[英]Removing class pointer from member function pointer type

我在stpp :: is_function的cppreference示例中看到了这段代码片段,我不明白它是如何工作的。 有人可以向我解释为什么U会在PM_traits中被推断出来吗?

struct A {
  int fun() const&;
};

template<typename>
struct PM_traits {}; 

template<class T, class U>
struct PM_traits<U T::*> {
  using member_type = U;
};

int main() {
  using T = PM_traits<decltype(&A::fun)>::member_type; // T is int() const&
}

UT::*是一种类型,当我们有UT::* pp指向类T的成员,该成员的类型为U

funint () const &类型的int () const & :一个const & -qualified函数,不带参数并返回int ,它是A类的成员。 因此,在推论中, T推导为AU推导为A::fun的类型,即int () const &


它可能看起来有点令人困惑,因为如果显式拼写出&A::fun的类型,则必须写入int (A::*)() const & 但是,在模板的情况下,类型int () const &在名称U后面是“隐藏”,因此指向成员的指针只是UA::* 它类似于如何使用类型名称来简化普通函数指针的语法:

int foo(char, double) { return 42; }

using Fun = int (char, double);
Fun *p = &foo;
// instead of:
int (*q)(char, double) = &foo;

模板中也是如此,只需使用A::*而不是*

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM