我有一段代码需要传递一个函数对象(函数式)。我不能使用函数指针,因为我需要存储一些状态变量。假设我有很多状态变量。可以通过引用传递函数对象吗?我只见过按值传递的函数对象。这是我的代码的样子:
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)
通过引用传递函数对象很好,但你应该知道许多 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 中放宽了。
| 归档时间: |
|
| 查看次数: |
634 次 |
| 最近记录: |