如何解释“void(*)()”?
Posted
技术标签:
【中文标题】如何解释“void(*)()”?【英文标题】:How to interpret "void(*)()"? 【发布时间】:2020-02-07 13:18:46 【问题描述】:当我阅读shared_ptr时,我发现了一段代码:
void(*)()
如何解读?
【问题讨论】:
【参考方案1】:开闭括号(*)
之间的星号表示函数指针的声明。 this 的左右分别代表它所指向的函数的返回类型和函数参数。
所以基本上在你的情况下:
void printHello()
std::cout<<"Hello";
void(*fPtr)() = printHello;
在 C++ 中,您可以使用更好的 OOP 方式来做同样的事情:
std::function<void()> fPtr = printHello;
fPtr();
您必须包含 functional
标头
【讨论】:
【参考方案2】:它是一个函数类型的指针,它可以用于所有没有参数并返回void
的函数。
例如:
void function_1()
void function_2()
void(*func_1_ptr)() = function_1; // or = &function_1;
void(*func_2_ptr)() = function_2; // or = &function_2;
现在func_1_ptr
持有指向函数function_1
的指针,func_2_ptr
持有指向function_2
的指针。
您可以通过using
声明使类型更直观。
using FunPtrType = void(*)();
现在你可以写了
FunPtrType func_1_ptr = function_1; // or = &function_1;
//Type identifier function
FunPtrType func_2_ptr = function_2; // or = &function_2;
【讨论】:
只是为了完整:您像普通函数一样使用它们,所以func_1_ptr();
调用function_1()
。【参考方案3】:
这是指向函数的指针类型,它不带参数并返回void
。
【讨论】:
以上是关于如何解释“void(*)()”?的主要内容,如果未能解决你的问题,请参考以下文章