64 c++ function-pointers return-value
我正在尝试创建一个带字符的函数,然后根据字符的内容返回一个指向函数的指针.我只是不确定如何使函数返回指向函数的指针.
eri*_*len 95
int f(char) {
return 0;
}
int (*return_f())(char) {
return f;
}
Run Code Online (Sandbox Code Playgroud)
不,说真的,使用typedef :)
小智 68
#include <iostream>
using namespace std;
int f1() {
return 1;
}
int f2() {
return 2;
}
typedef int (*fptr)();
fptr f( char c ) {
if ( c == '1' ) {
return f1;
}
else {
return f2;
}
}
int main() {
char c = '1';
fptr fp = f( c );
cout << fp() << endl;
}
Run Code Online (Sandbox Code Playgroud)
sea*_*n e 18
为函数签名创建typedef:
typedef void (* FuncSig)(int param);
Run Code Online (Sandbox Code Playgroud)
然后将您的函数声明为返回FuncSig:
FuncSig GetFunction();
Run Code Online (Sandbox Code Playgroud)
在 C++11 中,您可以使用尾随返回类型来简化语法,例如假设一个函数:
int c(int d) { return d * 2; }
Run Code Online (Sandbox Code Playgroud)
这可以从一个函数返回(需要一个双精度来表示):
int (*foo(double e))(int)
{
e;
return c;
}
Run Code Online (Sandbox Code Playgroud)
使用尾随返回类型,这变得更容易阅读:
auto foo2(double e) -> int(*)(int)
{
e;
return c;
}
Run Code Online (Sandbox Code Playgroud)
假设int f(char)和ret_f返回&f。
C++98/C++03兼容方式:
丑陋的方式:
int (*ret_f()) (char) { return &f; }
Run Code Online (Sandbox Code Playgroud)
使用类型定义:
typedef int (sig)(char);
sig* ret_f() { return &f; }
Run Code Online (Sandbox Code Playgroud)
或者:
typedef int (*sig_ptr)(char);
sig_ptr ret_f() { return &f; }
Run Code Online (Sandbox Code Playgroud)
从 C++11 开始,我们还有:
与decltype:
decltype(&f) ret_f() { return &f; }
Run Code Online (Sandbox Code Playgroud)
尾随返回类型:
auto ret_f() -> int(*)(char) { return &f; }
Run Code Online (Sandbox Code Playgroud)
或者:
auto ret_f() -> decltype(&f) { return &f; }
Run Code Online (Sandbox Code Playgroud)
typedef与using:
using sig = int(char);
sig* ret_f() { return &f; }
Run Code Online (Sandbox Code Playgroud)
或者:
using sig_ptr = int (*)(char);
sig_ptr ret_f() { return &f; }
Run Code Online (Sandbox Code Playgroud)
C++14 补充说:
auto 扣除:
auto ret_f() { return &f; }
Run Code Online (Sandbox Code Playgroud)
小智 6
以下是不使用 typedef 的方法:
int c(){ return 0; }
int (* foo (void))(){ //compiles
return c;
}
Run Code Online (Sandbox Code Playgroud)
返回函数的语法:
return_type_of_returning_function (*function_name_which_returns_function)(actual_function_parameters) (returning_function_parameters)
Run Code Online (Sandbox Code Playgroud)
例如:考虑如下需要返回的函数,
void* (iNeedToBeReturend)(double iNeedToBeReturend_par)
{
}
Run Code Online (Sandbox Code Playgroud)
现在,可以将iNeedToBeReturend函数返回为
void* (*iAmGoingToReturn(int iAmGoingToReturn_par))(double)
{
return iNeedToBeReturend;
}
Run Code Online (Sandbox Code Playgroud)
经过3年的专业编程生涯,我觉得学习这个概念非常糟糕。
等待下来等待解引用函数指针的好处。
返回函数指针的函数示例是 c ++中动态库中的dlopen
| 归档时间: |
|
| 查看次数: |
59043 次 |
| 最近记录: |