私有静态方法是否必要?

Jon*_*Mee 8 c++ methods static private function

我上一家公司的主要工程师有一个规则,即private static方法应该作为实现文件中的函数实现,而不是作为类方法.

我不记得他的规则是否有任何例外.我在当前的工作中偶然发现了它的动机:如果有问题的函数的参数或返回类型是需要在标题中包含定义文件的对象,这可能会导致不必要的困难.

这足以让我远离private static再次使用某种方法,但在我把它们写下来之前,我想知道是否有人知道他们填充的利基,实现文件功能不会?

编辑:

这里的一个例子可能会有帮助.假设这是声明的开始,class Foo其他方法将void foo()在实现文件中调用:

class Foo {
    static void foo();
Run Code Online (Sandbox Code Playgroud)

所以foo只能通过其他方法访问Foo.为什么我不在foo实现文件中定义,并将它一起保留在标题之外?

das*_*ght 11

static实现文件中的独立函数不同,私有静态成员函数可以在类的标题中使用.这在您想要内联非私有成员函数的情况下非常重要,该函数调用您的私有静态函数:

class Demo {
private:
    static std::string sanitize(const std::string& name);
    std::string name;
public:
    Demo(const std::string& n) : name(sanitize(n)) {
    }
};
Run Code Online (Sandbox Code Playgroud)

使用独立的静态函数执行相同的操作需要Demo在cpp文件中实现构造函数.


ana*_*lyg 4

成员函数可以访问private类的所有成员。如果函数需要访问这些成员,则它应该是成员。无论是否是 ,这都适用static

函数static是一种不对特定对象进行操作的函数。但是,它仍然可以接收对象作为参数。例如:

class A
{
    int m;

    static int process_3_objects_in_some_way(A x, A y, A z)
    {
        return x.m + y.m + z.m;
    }
}
Run Code Online (Sandbox Code Playgroud)

创建函数的另一个原因static是参数的顺序。例如,print

class A
{
    int m;

    static void print(std::ostream& stream, A x, int options)
    {
        stream << "Value is: " << (x.m * 1000000 + options);
    }
}
Run Code Online (Sandbox Code Playgroud)