【发布时间】:2013-11-21 17:04:30
【问题描述】:
由于 Dijkstra 的算法和 Prim 的算法非常相似,我想创建一个基本算法类(我会称之为“Greedy”之类的),然后我想从 Greedy 继承并根据类。
我认为归结为这一点。我想重用算法的大部分,但要调整一两个操作。
class BaseAlg
{
public:
BaseAlg(std::vector<int> data) //constructor sums a vector and stores result
{
int accum = 0;
for (unsigned int i = 0; i < data.size(); ++i)
accum += data[i];
result = accum;
}
protected:
int result;
};
class Alg1 //A second, similar algorithm
{
public:
Alg1(std::vector<int> data)
{
//I want to reuse BaseAlg except use *= instead of +=;
}
};
因此,一种方法是只拥有一个类(BaseAlg)并将“选择器”值添加到类的构造函数中。我会打开该选择器值并在不同情况下执行 += 或 *= 。我觉得应该有一种方法可以通过继承来实现这种重用,因为在 Greedy 和 Prim 以及 Greedy 和 Dijkstra 之间存在“一种”关系。但我无法完全弄清楚。有什么想法吗?
【问题讨论】:
-
答案是模板元编程
-
尝试Modern C++ Design 以获取有关如何以零运行时开销执行此类操作的良好示例。旧的,但最好的 C++ 书籍之一。
标签: c++ algorithm inheritance