C++组织函数流

C++ organize flow of functions

我正在用 C++ 为微控制器编写程序,我需要编写一个函数来通过与其相连的计算机输入一些数字。

这个函数应该执行许多不同的和明确定义的任务,例如:从计算机获取数据(字符),检查字符是否有效,将字符转换为实际数字,等等。作为单个函数编写,它至少有 500 行长。因此,我将编写一组较短的函数和一个 "main" 函数,以唯一有意义的顺序调用其他函数。这些函数将永远不会在其余代码中调用(当然主函数除外)。最后一件事 - 函数需要相互传递相当多的变量。


组织这些功能的最佳方式是什么?我的第一个困难是创建一个 class,在 public 部分只有 "main" 函数,其他函数和不同函数共享的变量作为私有成员,但我想知道这是否是很好的做法:我认为它不尊重 "class" 的 C++ 概念...例如要使用此 "group of functions" 我需要做类似的事情:

class GetNumbers {
    public:
        //using the constructor as what I called "main" function
        GetNumbers(int arg1, char arg2) {
            performFirstAction();
            performSecondAction();
            ...
        }
    private:
        performFirstAction() {...};
        performSecondAction() {...};
        ...

        bool aSharedVariable;
        int anotherVariable;
        ...
};

我实际上需要从计算机输入这些数字的地方:

GetNumbers thisMakesNoSenseInMyOpinion (x,y);

使 "main" 函数成为普通的 class 方法(而不是构造函数)似乎更糟:

GetNumbers howCanICallThis;
howCanICallThis.getNumbers(x,y);
...
//somewhere else in the same scope
howCanICallThis.getNumbers(r,s);

这真是一道软件设计题。老实说,除非你和一群其他人共享组件,否则我真的很担心它是如何封装的。

许多库(新的和旧的)可能会创建一系列以特定方式使用的函数。有时他们有一个内置的 "state machine," 但没有特定的方法来强制以特定的顺序使用函数。这没关系,只要它有据可查。一组函数可能以相同的词作为前缀并打包为一个库,如果它是可重复使用的,这样有人可以 link 到你的 dll 并包含适当的头文件。

https://en.wikipedia.org/wiki/Finite-state_machine

A finite-state machine (FSM) or finite-state automaton (FSA, plural: automata), finite automaton, or simply a state machine, is a mathematical model of computation.

组织一组计算的另一种方法是将它们打包为 class,允许构造函数接受所需的输入,然后...

  1. 在构造函数中开始所需的计算
  2. 调用 public 函数后开始计算,例如 ->compute()
  3. 将其变成 functor(具有一组重载 () 运算符的 class)
  4. 以及基本上无数其他选项...

这有一些好处,因为如果以后您有多种方法来计算结果,您可以使用称为策略模式的东西即时替换它。

https://en.wikipedia.org/wiki/Strategy_pattern

In computer programming, the strategy pattern (also known as the policy pattern) is a behavioural software design pattern that enables selecting an algorithm at runtime.

最后,只要您保持一致,使用哪种并不重要。如果你想用给定的语言做出更多 "idiomatic" 的东西,你真的必须到那里去看看网络上的一些代码,以了解事情是如何完成的。不同的社区喜欢不同的风格,这最终都是主观的。