在一行中声明和定义函数指针变量

Che*_*tor 4 c++ lambda function-pointers

......为前一个道歉

在C++中我们如何执行以下操作

// fundamental language construct        
   type name = value ; 
// for example 
   int x = y;
Run Code Online (Sandbox Code Playgroud)

用函数指针?

 typedef (char)(*FP)(unsigned);

 // AFAIK not possible in C++
 FP x = y ;
Run Code Online (Sandbox Code Playgroud)

我可以用lambdas:

 FP x = []( unsigned k) -> char { return char(k); }
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在没有lambda的情况下做到这一点.有任何想法吗?

n. *_* m. 12

只要可以编写typedef,就可以使用几乎相同的语法编写不带typedef的变量声明。

例:

 // typedef
 typedef char(*FP)(unsigned);
 FP x = y ;

 // no typedef
 char(*x)(unsigned) = y;
Run Code Online (Sandbox Code Playgroud)

删除typedef关键字,您将获得一个变量声明。如果需要,可以在其上拍一个初始化。


Gui*_*cot 12

您可以使用auto

auto fptr = &f;
Run Code Online (Sandbox Code Playgroud)

它跳过了对typedef的需求,并保留了一个不错的语法。


ΦXo*_*a ツ 6

它几乎和Lambdas一样,但我觉得很难读:

void my_int_func(int x)
{
    std::cout << "ther param is: " << x << std::endl;
}

//
int main(int argc, char *argv[])
{
    void (*foo)(int) = my_int_func;
    foo(1);
Run Code Online (Sandbox Code Playgroud)


for*_*818 5

但我不知道如何在没有 lambda 的情况下做到这一点。有任何想法吗?

只是不要使用 lambda,而是使用函数:

typedef char(*FP)(unsigned);   

char foo(unsigned){ return 0;}

int main() {
    FP x = foo;
}
Run Code Online (Sandbox Code Playgroud)

函数指针 typedef 相当讨厌,如果你能更好地使用using

using FP = char(*)(unsigned);
Run Code Online (Sandbox Code Playgroud)

现场演示