静态函数导致更多静态函数

时间:2011-05-17 14:11:44

标签: c++

我有一个类,它有一些自己有用的函数,它们是静态的。现在这些函数依赖于其他自身无用的函数(但不与类成员变量交互),但也是静态的,因此它们是私有的。现在我有一个包含许多非静态函数的类,以及一些静态公共函数和一些静态私有函数。

这是好习惯吗? (我应该将其作为社区维基吗?)

4 个答案:

答案 0 :(得分:10)

我认为您应该将这些函数声明为自由函数。如果他们不需要会员,那应该不是什么大问题 也许你应该阅读这个article。我发现改善课堂设计非常有用。

答案 1 :(得分:4)

这听起来不错,而且效果很好。但是有一些事情需要考虑。

可以使私有静态功能更加私密。如果你只是将它们放在.cpp文件中作为自由函数(不在类中,但理想情况下放在'未命名的命名空间'中),那么它们就不会在.h文件中出现。这将是有利的,因为使用您的类的另一个.cpp文件将不会看到这些私有静态变量。这将使编译时间更快。此外,它可以让你自由地改变.cpp文件中的函数,如果你做了任何更改,使用.h文件的其他文件不需要在每次更改时重新编译,因为你不必更改.h文件来改变这些功能。

其次,有时静态函数会导致单元测试的编写变得棘手。如果你有一个使用这些静态函数的类X,如果你想测试类X,那么将类X与静态函数隔离是很棘手的。相反,你使用非静态方法并定义了一个接口类,你正在编写的类源于此,您可以更轻松地使用“控制反转”和“依赖注入”技术为您的类编写单元测试。我不会在这里解释这些技术,因为有很多关于互联网的好描述。

答案 2 :(得分:0)

保持简单。与该类无关的static函数可以封装在内部class或新namepsace中。 e.g

struct A
{
  struct Util  // can also be put outside in a namespace for others to use
  {
    static void Independent () { }
  };
  static void dependent ();
};

答案 3 :(得分:0)

我会查看“许多非静态函数”以及可能你可以将类拆分为一些通过继承相关的较小实体,或者理想情况下更独立,并且可以通过组合将其转换为初始形式。通常,“很多”这个词并不是良好设计的标志。