可以通过引用传递函数对象吗?

Nar*_*oot 4 c++

我有一段代码需要传递一个函数对象(函数式)。我不能使用函数指针,因为我需要存储一些状态变量。假设我有很多状态变量。可以通过引用传递函数对象吗?我只见过按值传递的函数对象。这是我的代码的样子:

struct FunctionObject {
    double a, b, x, y;
    double operator() (int v, int w) {....}
};

template <class T>
Class MyClass {
     T& func;
     .....
public:
     MyClass(T& func):func(func) {}
     .....
};
Run Code Online (Sandbox Code Playgroud)

eca*_*mur 5

通过引用传递函数对象很好,但你应该知道许多 C++ 算法复制函数对象,所以如果你需要一个库算法来尊重你的状态,你应该将它作为函数对象内部的引用传递:

struct State {
    double a, b, x, y;
};
struct Function {
    State &state;
    explicit Function(State &state): state(state) {}
    double operator() (int v, int w) {....}
};
State state;
std::...(..., Function(state), ...)
Run Code Online (Sandbox Code Playgroud)

此外,一些库算法(例如transform)要求 C++11 之前的函数对象没有副作用,即没有任何状态;这个要求很少强制执行,在 C++11 中放宽了。