好多人喜欢把工具函数做成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

c++ 静态类成员函数(static member function) vs 名字空间 (namespace)的更多相关文章

  1. static 和 no static Member function学习

    以下是做实验的一段代码: #include <iostream> using namespace std; typedef void (*p)(); class Object { publ ...

  2. 关于C++中的非静态类成员函数指针

    昨天发现了一个问题,就是使用对类中的非静态成员函数使用std::bind时,不能像普通函数一样直接传递函数名,而是必须显式地调用&(取地址),于是引申出我们今天的问题:非静态类成员函数指针和普 ...

  3. Python 3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里

    reduce函数:在Python 3里,reduce()函数已经被从全局名字空间里移除了,它现在被放置在fucntools模块里 用的话要 先引入:>>> from functool ...

  4. 2_成员函数(Member Functions)

    成员函数以定从属于类,不能独立存在,这是它与普通函数的重要区别.所以我们在类定义体外定义成员函数的时候,必须在函数名之前冠以类名,如Date::isLeapYear().但如果在类定义体内定义成员函数 ...

  5. C++中的Thunk技术 / 非静态类成员函数作为回调函数 的实现方法

    原文:https://blog.twofei.com/616/ 用我的理解通俗地解释一下什么是C++中的Thunk技术吧! Thunk技术就是申请一段可执行的内存, 并通过手动构造CPU指令的形式来生 ...

  6. 将对象的所有属性名放到一个数组中 || 获得对象的所有属性名 || return;不具有原子性 || 怎样自己制作异常|| 判断对象有没有某个属性 || 当传递的参数比需要的参数少的时候,没有的值会被赋予undefined || 获得函数实际传递的参数 || 怎么用函数处理一个对象 || 用一个名字空间定义一个模块所有的函数 || 给一个对象添加方法

    获得对象的所有属性名 || 将对象o的所有属性名放到数组中 var o = {x:1,y:2,z:3}; var arr = []; var i = 0; for(arr[i++] in o){};/ ...

  7. C++ - 模板类模板成员函数(member function template)隐式处理(implicit)变化

    模板类模板成员函数(member function template)隐式处理(implicit)变化 本文地址: http://blog.csdn.net/caroline_wendy/articl ...

  8. 成员函数指针与高效C++委托 (delegate)

    下载实例源代码 - 18.5 Kb 下载开发包库文件 - 18.6 Kb 概要 很遗憾, C++ 标准中没能提供面向对象的函数指针. 面向对象的函数指针也被称为闭包(closures) 或委托(del ...

  9. C++ 之 常量成员函数

    类的常量成员函数 (const member function), 可以读取类的数据成员,但是不能修改. 1  声明 1.1  const 关键字 在参数列表后,加 const 关键字,声明为常量成员 ...

随机推荐

  1. python3 CERTIFICATE_VERIFY_FAILED错误 certificate verify failed

    在response = request.urlopen(url)打开一个https连接时报如下错误: urllib.error.URLError: <urlopen error [SSL: CE ...

  2. Documentation/PCI/pci-iov-howto.txt

    Chinese translated version of Documentation/PCI/pci-iov-howto.txt If you have any comment or update ...

  3. Android 与 js 简单互调

    总结: Android 调用  js: 在 Android 中创建通往 javascript 的接口; 在 html  中定义要执行的方法; 在  Android  中的具体事件中进行调用. cont ...

  4. How to skip to next iteration in jQuery.each() util?

      [问] I'm trying to iterate through an array of elements. jQuery's documentation says: jquery.Each() ...

  5. [Algorithm] Find merge point of two linked list

    Assume we have two linked list, we want to find a point in each list, from which all the the nodes s ...

  6. 比特币 Bitcoin 是什么,我勒个去,哈耶克果然超前——货币的非国有化,容我思量一下【转载+整理】

    原文地址 比特币矿业史(上):故事的开始,CPU 时代 比特币矿业史(中):群众的觉醒 ,GPU 时代 比特币矿业史(下):巨头的诞生 ,ASIC 时代 本文内容 引子 0 序 1 故事的开始 : C ...

  7. Office办公 SVG的图片文件如何保存为PNG

    用浏览器打开,然后右击图片另存为PNG   再用PS打开可以看到就是没有背景的PNG图片了        

  8. 获取js连接参数js_args

    获取js连接参数,如下以链接: <script src="js/jscript.js?skin=green" type="text/javascript" ...

  9. jQuery.cookie应用操作

    //1.插件框架: /* * name @键 * value @值 * options @选项,包括有效期 路径 域名等 */ jQuery.cookie = function(name, value ...

  10. 010-Go 操作PostgreSQL数据库2

    1:sql脚本 create table post( id serial primary key, content text, author ) ) 2:post.go package post im ...