相关疑难解决方法(0)

私有静态成员函数或匿名命名空间中的自由函数?

我最近在风格上做了一个改变,想看看其他c ++程序员对它的看法以及是否有任何缺点.

本质上,当我需要一个不需要访问给定类成员的实用函数时,我以前做的是这样的:

file.h

class A {
public:
    // public interface
private:
    static int some_function(int);
};
Run Code Online (Sandbox Code Playgroud)

file.cpp

int A::some_function(int) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但最近,我更喜欢做更像这样的事情:

file.cpp

namespace {
    int some_function(int) {

    }
}
// the rest of file.cpp
Run Code Online (Sandbox Code Playgroud)

这是我的思考过程:

  • 编辑的文件少了一个
  • 简单地在头文件中列出该函数可以暗示不需要公开的实现细节(即使不是公开可用的).
  • 如果函数的原型需要更改,则只需要重新编译一个文件.

最后一个对我来说是最引人注目的.所以我的问题是:这有什么缺点吗?

对于我能想到的大多数目的而言,它们在功能上是等效的.在我看来,private static函数几乎总是可以在匿名中转换为自由函数namespace.

编辑:我想到的一件事是,如果给定一个指向要操作的对象的指针,private static函数就可以访问private成员,但如果是这样的话,为什么不让它成为非static成员呢?

你们有什么感想?

c++ static namespaces function

34
推荐指数
5
解决办法
1万
查看次数

自由功能与成员功能

拥有一个自由函数(在匿名命名空间中只能在单个源文件中访问)并将所有变量作为参数发送,而不是让私有类成员函数没有任何参数并直接访问成员变量,这有什么好处?谢谢!

标题:

 Class A {
    int myVariable;
    void DoSomething() {
       myVariable = 1;
    }
 };
Run Code Online (Sandbox Code Playgroud)

资源:

 namespace {
    void DoSomething2(int &a) {
        a = 1;
    }
 }

 int A::SomeFunction() {
    DoSomething2(myVariable); // calling free function
    DoSomething(); // calling member fucntion
 }
Run Code Online (Sandbox Code Playgroud)

如果您更喜欢将它们作为成员,那么如果我有一个案例,我首先调用一个不访问任何成员变量的函数,但该函数调用另一个访问成员的函数.它们既可以是会员功能还是免费的?

c++ dependencies pimpl-idiom member-functions non-member-functions

17
推荐指数
3
解决办法
1万
查看次数