仅包含公共函数的C++类

use*_*424 1 c++ design-patterns

我想有一个只包含公共函数的类,例如:

class foo
{
    public:
        int f1(param1, param2) ;
        void f2(param1, param2);
};
Run Code Online (Sandbox Code Playgroud)

Class没有状态,它只是操纵输入参数,行为像辅助类,

这是一个好的设计吗?还是需要特殊模式?模式的名称是什么?

Sea*_*ean 7

让它们成为独立的功能.并非C++中的所有内容都必须在类中.例如,如果你看一下STL,你会发现它有很多独立功能.

  • 那个自由站立功能......在命名空间中?:) (2认同)

Dan*_*lli 5

简答:在命名空间内使用函数.

namespace foo
{
    int f1(param1, param2);
    void f2(param1, param2);
}
Run Code Online (Sandbox Code Playgroud)

但是,如果您的应用程序具有OO设计,您应该问自己为什么需要一组仅操作输入参数的函数.相信我:你的代码试图告诉你一些事情 :-)

在你的代码片段中,你使用了虚拟名称(foo,f1,f2,param1,param2),所以我无法猜测你的函数是做什么的.但也许你的函数在相同的参数上运行:在这种情况下,你可以将参数提升为一个类.

之前:

bool IsLeapYear( int date );
void IncrementDay( int date, int numOfDays );
Run Code Online (Sandbox Code Playgroud)

后:

class Date
{
    public:
        bool IsLeapYear() const;
        void IncremetDay( int numOfDays );
    private:
        int daysFromOrigin;
};
Run Code Online (Sandbox Code Playgroud)

如果您的函数采用不同的参数,您可以考虑将您的函数分配给OO设计中的现有类(假设您确实需要OO设计!).

最后,如果您的函数不相关,您可以考虑将它们中的每一个移动到现有类中,即使是静态方法(它实际上取决于函数的含义).

至于你的最后一个问题"这是一个好的设计吗?",这取决于你正在做的设计:

  • 面向对象的设计:可能它不是一个好的OO设计,但没有更多的上下文,很难说
  • 程序设计:没关系
  • 功能设计:没关系

虽然根据你的范例,这可能是也可能不是一个好的设计,当然这不是一个好的C++ 习语:你应该在命名空间内使用自由函数而不是只使用静态方法的类.