返回函数指针的函数的签名
Signature for function returning a function pointer
我知道在很多情况下最好不要问为什么,但这个函数签名对我来说毫无意义。我知道我们应该使用 typedefs,但我想看看我是否可以理解如何在没有以下情况下做到这一点:
bool(*fn)(std::string&); // This is function pointer
void funcTakingFunc1(bool(*)(std::string&)) { } // This works for function arguments
bool(*)(std::string&) funcReturningFunc() {} // Trying the same as return type, doesn't work
bool(*funcReturningFunc2(std::string&))() {} // This is what I found on another SO question
最后一个我认为是对的,这对我来说毫无意义,函数名称和"返回函数"的参数是从左到右切换的。对此有什么解释吗?
具体来说,我正在尝试创建一个接受std::string&
的函数,并返回一个指向bool (*)(std::string&)
的函数指针,但这不起作用:
bool (*getConsoleCmdByName)(std::string&)(std::string& cmd);
编辑:事实证明这是正确的,我认为:
bool (*getConsoleCmdByName(std::string&))(std::string& cmd);
贾罗德建议:
auto getConsoleCmdByName(std::string&) -> bool (*)(std::string&)
作为一种可能性,这对我来说似乎足够清楚。
为此,存在更容易理解的复杂表达式 顺时针/螺旋规则
+---------------------------------+
| |
| +----------+ |
| ^ | |
bool(*funcReturningFunc2(std::string&))() {}
^ ^ | |
| +------------------+ |
| |
+--------------------------------------+
你可能会问,什么是funcReturningFunc2?
- funcReturningFunc2 是一个传递对字符串的引用的函数
- funcReturningFunc2 是一个函数,将引用传递给返回指针的字符串
- funcReturningFunc2 是一个函数,将引用传递给一个字符串,返回指向函数的指针,不传递任何内容并返回
- funcReturningFunc2 是一个函数,将引用传递给一个字符串,返回指向函数的指针,该函数不传递任何内容并返回
bool
众所周知,老式的函数指针声明很难阅读。
C++11 为标准库提供了一些类型支持工具,可用于简化复杂的声明,例如:
using ret_t = std::add_pointer_t<bool(std::string&)>;
using func_ptr_t = std::add_pointer_t<ret_t(std::string&)>;
相关文章:
- QMetaObject invokeMethod的基于函数指针的语法
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- c++r值引用应用于函数指针
- 模板函数指针和lambda
- 是否可以将llvm::FunctionType转换为C/C++原始函数指针
- 带有类的函数指针
- () 函子后面的括号,而不是函数指针?
- 全局作用域中函数指针的赋值
- 使用"Task"函数指针队列定义作业管理器
- 将成员函数指针作为参数传递给模板方法
- 如何创建对象函数指针C++映射?
- 匹配函数指针作为模板参数?
- 通过函数指针定义类范围之外的方法
- 存储在类中的函数指针
- C++从函数指针数组调用函数
- 将返回值存储在函数指针数组的指针中是如何工作的?
- 整数键映射到头文件中的成员函数指针
- 从类成员函数到类 C 函数指针的转换
- 如何将内联匿名函数分配给C++函数指针
- 将字符缓冲区强制转换为函数指针