如果你想让你的核心算法执行一个专门的算法,核心算法和专门的算法之间应该有某种契约。
如果您将此合同定义为接口,则您的容器只是一个包含指向这些接口的指针的容器,例如:
class IAlgorithm
{
public:
virtual double operator()(double d) = 0;
};
typedef std::vector<IAlgorithm *> Algorithms;
调用随机算法然后简单地获取向量的大小,获取介于零和列表大小 (0..size-1) 之间的随机值,获取该位置的条目并调用接口。
或者,您也可以使用新的 C++0x std::function 构造,如下所示:
#include <functional>
typedef std::function<double(double)> Algorithm;
typedef std::vector<Algorithm> Algorithms;
取一个算法是类似的,你应该可以这样调用一个算法:
Algorithms myAlgorithms;
...
double myresult = myAlgorithms[2](mydouble);
这种方法的优点是您也可以使用 lambda。
编辑:这是一个使用 lambda 的示例。它可以按预期与 Visual Studio 2010 一起编译和工作(我自己刚刚测试过):
#include <iostream>
#include <vector>
#include <functional>
typedef std::function<double(double)> Algorithm;
typedef std::vector<Algorithm> Algorithms;
int main()
{
Algorithms algorithms;
algorithms.push_back([](double d)->double{return d+d;});
algorithms.push_back([](double d)->double{return d*d;});
std::cout << algorithms[0](5) << std::endl;
std::cout << algorithms[1](5) << std::endl;
}