我正在考虑以下情况的适当类设计:假设我想创建一个类设计,类似于(数学)函数。所有函数都从基类Function
派生。现在可以想到一个函数FuncB
,它是多个FuncA
对象的总和。在我的情况下,FuncB
和FuncA
是相当复杂的对象,但我的当前实现归结为:
class Function
{
virtual double value() = 0;
};
class FuncA : public Function
{
public:
virtual double value() {return v;}
private:
double v;
};
class FuncB : public Function
{
virtual double value() {
double result = 0;
for( auto i : v)
result += i.value();
return result;
}
private:
std::vector<DerivedA> v;
};
在某种程度上,我认为这是一个糟糕的类设计,因为FuncB
有一个成员,它从与该类本身相同的基类继承。有什么更优雅的解决方法吗?
std::vector<Function*> v;
将会更加有用。 - Piotr Skotnickiaccumulate
,它必须是return std::accumulate(v.begin(), v.end(), 0.0, [](double result, const auto& f){ return result + f.value(); });
。我认为我更喜欢OP的代码。 - Chris Drew