缺省构造作为函数参数缺省值的优化

我们经常在看到这样的函数声明:
int f(double,MyClass=MyClass());
不仅是我们写的代码,std库中也经常这样写。
仔细想想,如果这个函数多次使用这个缺省值那就会调用多次构造函数,这样一来效率就降低了。
下面是我针对,这中情况写的一个Zero模板。
Zero只有一个可用的接口就是value,value()会返回默认值。
其中还对基本数值类型进行了特别优化,这样只是为了全面,如果直接用0也是一样的。
这个东西的缺点是不能提供自己的值,只能用T()。
主要原因是因为template使用的 引用或指针只能用全局对象。
如果有全局对象那还不如直接用那对象哪。

下面我的Zero.hpp文件内容:
 
#ifndef ZERO_PIBOYE_HPP
#define ZERO_PIBOYE_HPP
//Author:piboye
//Created Date: 2005,12,29

namespace piboye
{
 template <typename T>
 class Zero
 {
 private:
  static T const c_value;
 public:
  static inline T const & value() {return c_value;}
 };
 template <typename T>
 T const Zero<T>::c_value=T();

 //辅助特化宏
 #define MSpecZero(T,val) /
 template <> /
 class Zero<T> /
 {/
 public: /
  static inline T value() {return val;}/
 };
//基本类型特化
 MSpecZero(int,0)
 MSpecZero(short,0)
 MSpecZero(long,0)
 MSpecZero(char,0)
 MSpecZero(unsigned int,0)
 MSpecZero(unsigned short,0)
 MSpecZero(unsigned long,0)
 MSpecZero(unsigned char,0)
 MSpecZero(float,0.0f)
 MSpecZero(double,0.0)
 MSpecZero(long double,0.0l)
}
#endif //ZERO_PIBOYE_HPP

使用方法:
int f(double,MyClass=Zero<MyClass>::value());

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页