c++ - 软件设计 : Too many classes?

标签 c++ oop design-patterns

我是软件设计方面的外行。我正面临一个“问题”,也许可以通过一些众所周知的技术/惯用语/模式来解决,我想被告知。

我有一个抽象基类,基本上定义了一个纯虚成员函数,仅此而已。然后我有几个派生自这个的类并覆盖所述虚函数。我现在有六个这样的类(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/

相关文章:

spring - IOC 设计模式是否独立于工厂设计模式?

java - 如何在每个子枚举中实现具有不同第一个参数的功能接口(interface)

javascript - 在 C++ 中嵌入脚本引擎

C++实现循环宏的方法

php mcrypt_encrypt 到 C/C++/MFC equalivilent

javascript - 通过对象组合保持自身属性私有(private)

java - 我需要帮助理解这段java代码

c# - EntityFramework 和 IoC 接口(interface)在洋葱架构中属于什么位置?

c++ - 在 Xcode 中设置 Lua 时遇到问题

java - 在 Java 14 与 Java 17 中使用 instanceof