你能用带函数的引用运算符吗? 我最近开始学习C++中的引用(&)和去引用(*)操作符,我有一个问题。

你能用带函数的引用运算符吗? 我最近开始学习C++中的引用(&)和去引用(*)操作符,我有一个问题。,c++,C++,假设我有一个假设函数: int fooBar(int foo, int bar) { return foo+bar; } 我可以像调用带有引用运算符(&)的正则变量那样调用该函数吗 大概是这样的: int normalFunction(int &referencedFunction()) { return referencedFunction(someVariable); } int foo_bar(int x, int y){return x + y;} int

假设我有一个假设函数:

int fooBar(int foo, int bar)
{
    return foo+bar;
}
我可以像调用带有引用运算符(&)的正则变量那样调用该函数吗

大概是这样的:

int normalFunction(int &referencedFunction())
{
    return referencedFunction(someVariable);
}
int foo_bar(int x, int y){return x + y;}

int pass_func(int(&f)(int, int)){
    return f(some_var, some_other_var);
}
例如:

#include <iostream>

int func(int value) {return 5 + value;}

int func2(int (*fp)(int)) { //pointer to function
return fp(5);
}

int func3(int (&fp)(int)) {
  return fp(5);
}

对。它们在使用时具有与函数指针相同的语义

您可以像这样传递函数引用:

int normalFunction(int &referencedFunction())
{
    return referencedFunction(someVariable);
}
int foo_bar(int x, int y){return x + y;}

int pass_func(int(&f)(int, int)){
    return f(some_var, some_other_var);
}
<>但是在C++中这样做的一个更好的方法是使用模板参数:

template<typename Functor>
int pass_func(Functor &&f){
    return f(some_var, some_other_var);
}
模板
int pass_func(函子&f){
返回f(一些变量,一些其他变量);
}

然后可以传递函数指针/引用以及函数对象,如
std::function
和lambda表达式。(或任何定义了
int运算符()(int,int)
的函数)

听起来您想将一个函数传递给另一个函数。最简单的方法是:

#include <functional>
// ...

int normalFunction( std::function<int()> referenced_function )
{
    return referenced_function();
}
#包括
// ...
int normalFunction(标准::函数引用的函数)
{
返回引用的_函数();
}

std::function
的模板参数是返回类型,后面是括号中的参数列表
int()
表示返回int且不带参数的函数。

&运算符是运算符的地址。声明引用不使用任何运算符。不管怎么说,你是在问是否有可能像你有一个指向函数的指针那样引用一个函数?没错。更具体地说,这实际上是一个项目,我必须创建一个简单的2D图形API。我有一个函数来画一条bresenham线,但是因为我需要API是可移植的,我希望程序员能够定义plot pixel函数。然而,C++常常有更好的选择。A可能对您更合适。
fooBar
如何与
normalFunction
相关?我不知道函数可以是标准类型。。。呵呵。我得进一步调查一下。