c++ 静态类成员函数(static member function) vs 名字空间 (namespace)-阿里云开发者社区

开发者社区> 开发与运维> 正文

c++ 静态类成员函数(static member function) vs 名字空间 (namespace)

简介: 好多人喜欢把工具函数做成static member function。这样以增加隐蔽性和封装性,由其是从C#,java转而使用c++的开发人员。 例如: class my_math { public: static UINT Hash_XYZ(float x,float ...

 

好多人喜欢把工具函数做成static member function。这样以增加隐蔽性和封装性,由其是从C#,java转而使用c++的开发人员。

例如:

class my_math
{
public:
    static UINT Hash_XYZ(float x,float y,float z);
    static UINT Hash_XY(floag t, float y);
    //...
    //...
};

namespace my_math
{
    UINT Hash_XYZ(float x, float y, float z);
    static UINT Hash_XY(float x, float y);
    //...
    //...
}

 

调用这个函数都是这样调用的
my_math::HashXYZ(3423.0f,234.2f,2344.0f)

这在里应该使用namespace而不是class,原因如下:

1.在《Effective c++》这本书条款23中提到:宁以non-member、non-friend替换member函数。面向对象守则要求,数据以及操作数据的那些函数应该捆绑在一起,而上面这个函数显然没有数据。

2.命名空间允许使用using namespace,在代码使用密集使用相关函数时在作用域里声明using namespace my_math可以简化代码

3.c++的类一般是用在声明对象时使用的(a kind of object),静态成员函数一般要跟他所在的类有所关联。

4.一般要用到static类成员函数有以下原因:a.你需要访问一个静态类成员;b.有一些模板函数,你正好需要去为所有函数指定一个模板参数。

5.namespace可以把声明和定义 放在不同的.h

 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章