// 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时,我们区分两种不同的情况:
当然,我们创建了两个类:ignore_ref(用来忽略引用)和ignore_ptr(用来忽略指针)。下面是创建这两个类的代码: