【发布时间】:2016-06-09 05:31:26
【问题描述】:
我正在开发一个应用程序,其中有很多小算法,每个算法都由几行代码表示,所以我想将那几行代码存储为函数,但不仅如此,我还必须存储每个算法具有的一些数据,所以我决定创建一个“算法”类,在其中,我将在“变量”中存储函数。所以,我可以稍后使用它。
我不知道这是否可行,或者是否有其他方法可以实现。 我认为我的“算法”所在的类的局部变量或私有成员会有问题。
class Patterns {
private:
double line;
double addPoint(char n) {line += n;}
public:
double addPattern(int m) {
double tmp = 0;
char param;
// some calculations with m
// many calls to addPoint, "algorithm"
tmp += addPoint(param); // param1
tmp += addPoint(param); // param2
tmp += addPoint(param); // param3
tmp += addPoint(param); // param4
return tmp;
}
}
只是一个小示例,我想将所有这些“addPoints()”行存储在一个函数中,并随时使用,像这样
class Patterns {
private:
double line;
double addPoint(char n) {line += n;}
public:
double addPattern(int m) {
double tmp = 0;
// some calculations with m
/**
* vector of Algorithm class, get any Algorithm, and of that,
* return the stored function, so I can use it as in the above sample
*/
auto fn = vec->back()->getFunction();
tmp += fn(m)
return tmp;
}
}
编辑:这个问题包括使用库<functional>
【问题讨论】:
-
我想你的答案就在这里:stackoverflow.com/questions/1485983/…
-
你的意思是lambda functions?
-
std::function, std::bind, lambda - 可能满足您的需求。
-
使用可以使用 boost::functions 和 boost::bind。看看你要做的是创建一个 boost::function 类型的容器(向量、集合、队列等。根据你的要求适合)。用预期的功能初始化这个容器(在你的情况下是小算法)。然后使用只是迭代该容器并调用预期的函数。这是一种回调机制。
标签: c++ algorithm oop design-patterns optimization