今天我正在帮助跟踪不正确的代码片段(func是用int param声明的,但int *作为第二个param传递给std :: thread构造函数):
#include <thread> void func(int); int* ptr; void start() { std::thread t = std::thread(func,ptr); }
当我尝试使用gcc 5.3.0编译它时,它打印了以下类型的错误消息:
class std::result_of<void (*(int*))(int)>
现在我想知道如何将作为参数传递的类型解释为类std :: result_of<>.它类似于指向函数的指针(在本例中为void(*)(int)),但在括号中的星号之后使用extra(int *).如何解释这种类型?
解决方法
void (*(int*))(int)
方法是:
一个函数,它接受int *类型的单个参数作为返回
空虚
void (*signal(int sig,void (*func)(int)))(int);
它返回一个指向前一个信号处理程序的指针(与func参数的类型相同).
编辑:作为Pete Becker pointed out in comment,当与std :: result_of一起使用时,它是means something different,但表达式本身的类型仍然是我描述的类型,std :: result_of只是以不同的方式解释它.