私有静态方法是否必要?

时间:2017-01-31 18:19:58

标签: c++ function methods static private

我上一家公司的{p> The Principle Engineer有一条规则,range private方法应该作为实现文件中的函数实现,而不是作为类方法。

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

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

修改

这里的示例可能会有所帮助。假设这是static声明的开始,它有其他方法在实现文件中调用class Foo

void foo()

所以class Foo { static void foo(); 只能由foo的其他方法访问。为什么我不在实现文件中定义Foo,并将它一起保留在标题之外?

3 个答案:

答案 0 :(得分: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)) {
    }
};

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

答案 1 :(得分:4)

成员函数可以访问该类的所有override var isSelected: Bool { didSet { if isSelected { // do stuff where annotation is selected } else { // do opposite } } } 成员。如果函数需要访问这些成员,则它应该是成员。这适用于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; } } 的另一个原因是参数的顺序。例如,static

print

答案 2 :(得分:1)

Connect在另一个实现文件中实现的函数或类是另一个需要私有静态成员函数的示例。