在C++中,`::*`(双冒号星号)是什么意思?

10

当我的朋友在阅读这个hpp文件时,有一部分代码他无法理解:

  • A(B, C)int(int, int)或者在这个例子中的T(Type::*)是什么意思?我已经看到了std::function<int(int, int)>之类的用法,但仍然不知道int(int, int)单独表示什么。
  • Type::*是什么意思?一个星号标记怎么直接跟在::后面呢?

Type 是一个命名空间吗? - Dominique
“但仍然不知道int(int,int)单独表示什么” - int(int,int)int f(int,int)的类型。您应该弄清楚这个声明的含义(f是一个接受两个int参数并返回一个int的函数)。 - axiac
相关:https://dev59.com/n3RB5IYBdhLWcg3wSVcI - NathanOliver
@Dominique 我认为这更可能是一个类型名称。 - CXuesong
@axiac,你的意思是int(int, int)实际上是一种函数类型吗?我从来没有想过这一点,因为我见过类似于int (*func)(int, int)的东西,也就是函数指针类型,但不是函数类型本身。 - CXuesong
1个回答

7

::* 用于声明一个指向类成员的指针。因此,在这种情况下,它指向模板类型 Type 的一个成员。

std::function<int(int, int)> 是一个 std::function,用于保存一个接受参数为 (int, int) 的方法,并返回一个整数结果。(这是 C/C++ 类型声明语法中著名的复杂示例之一)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接