用一种简单的方法来忽略“out”参数

ZDNet软件频道 时间:2003-06-23 作者:ZDNet China |  我要评论()
本文关键词:cpp
开发者有时候需要建立仅仅用来保存结果的变量,这些变量最后会被忽略掉,它们被称之为“out”参数或者参量。
本文译自Builder.com,未经许可请勿转载开发者有时候需要建立仅仅用来保存结果的变量,这些变量最后会被忽略掉,它们被称之为“out”参数或者参量。当处理API时,经常会碰到“out”参数的情况,例如:

// Win32 API

// hProcess是已知的

// 即使我们只有在这里才用到这三个变量,但是我们还是必须创建它们,
//这样我们才可以调用GetProcessTimes函数。

FILETIME creationTime, exitTime, kernelTime, userTime;
GetProcessTimes( hProcess, &creationTime, &exitTime, &kernelTime, &userTime);


//注意,后三个参数是“out”参数。

有时候你可以通过向“out”参数传递NULL的方法来忽略它们,但是大多数情况下这并没有记录到项目文档之中,这导致了未定义的行为。如果向下面那样做,情况就会好的多:

// 忽略后三个“out”参数。
FILETIME creationTime;
GetProcessTimes( hProcess, &creationTime, ignore(), ignore(), ignore() );

如果编译器会根据返回值类型来查找重载函数,那么我们就可以创建一个ignore()函数。但是我们的假设在C++中并没有成立,所以我们需要通过指定我么希望忽略的类型来帮助编译器实现这一点,代码如下:

FILETIME creationTime;
GetProcessTimes( hProcess, &creationTime, ignore< LPFILETIME>(), ignore< LPFILETIME> (), ignore< LPFILETIME> () );

当这样处理API时,我们区分两种不同的情况:

  • 把“out”参数当作非const型指针,就像GetProcessTimes那样,如上所示。
  • 把“out”参数当作非const型引用。

当然,我们创建了两个类:ignore_ref(用来忽略引用)和ignore_ptr(用来忽略指针)。下面是创建这两个类的代码:


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134