我正在开发一个应用程序,其中有很多小算法,每个算法都由几行代码表示,所以我想将那几行代码存储为函数,但不仅如此,我必须存储每个算法都有的一些数据,所以我决定制作一个“算法”类,在其中,我将在“变量”中存储函数。所以,我可以稍后使用它。
我不知道这是否可行,或者是否有其他方法可以实现。 我认为我的“算法”所在的类的局部变量或私有(private)成员会有问题。
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>
最佳答案
这听起来怎么样:
#include <vector>
#include <functional>
int test(int a)
{
return a*2;
}
int main()
{
using namespace std;
vector < function<int(int)>> fv;
fv.push_back([](int a) {return a + 5; });
(fv.back())(10);
fv.push_back(test);
(fv.back())(240);
}
对于您的类(class),您需要更改函数
的模板参数的类型。
编辑(最小的 class
示例):
class Pattern
{
double addPoint(char n)
{
return n * 99.0;
}
double addPoint2(char n)
{
return n * 188.25;
}
vector < function<double(char)>> funcs;
public:
Pattern()
{
funcs.push_back(std::bind(&Pattern::addPoint, this, placeholders::_1));
funcs.push_back(std::bind(&Pattern::addPoint2, this, placeholders::_1));
}
void Call()
{
cout << (funcs.back())('A');
}
};
int main()
{
Pattern p;
p.Call();
}
但是,如果函数是全局的或静态的,则不需要执行bind
操作。
关于c++ - 存储一个函数c++,稍后调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37717544/