我是软件设计方面的外行。我正面临一个“问题”,也许可以通过一些众所周知的技术/惯用语/模式来解决,我想被告知。
我有一个抽象基类,基本上定义了一个纯虚成员函数,仅此而已。然后我有几个派生自这个的类并覆盖所述虚函数。我现在有六个这样的类(class),而且这个数字还在增加。这些类只有几个数据成员(很少,比如几个 double 或那个加上一个函数指针),它们的区别主要在于它们执行非常短的计算的方式。我想知道这是否表明设计不佳并且以其他方式更好地处理。
如果合适,有人可以指出我应该知道的相关设计模式或习惯用法。谢谢。
编辑
澄清一下,抽象基类没有任何数据成员。并非所有派生类都有数据成员。我正在做的是将积分作为类进行坐标转换。给定的转换只需要几个参数,有时还需要用户提供的函数。
最佳答案
具有一个虚函数的抽象基类听起来几乎完全像一个 std::function<>
包含一个 lambda。
例如:
#include <functional>
#include <vector>
#include <iostream>
int main()
{
using op = std::function<int()>;
int x = 7;
int y = 5;
auto a = [x, y]() -> int { return x + y; };
auto b = [x, y]() -> int { return x - y; };
auto ops = std::vector<op> { a, b };
for (const auto& o : ops)
{
std::cout << o() << std::endl;
}
}
最后,lambda 只是编写捕获(复制)一些对象或对对象的引用并公开调用运算符的类的简写形式。
std::function 是此类类的多态适配器。
使用 lambda 表达式可以节省您的输入时间。它是增加还是减少代码的语义表达(这可能更重要)是另一回事。
关于c++ - 软件设计 : Too many classes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37150012/