微小的RAII用于测试片段

时间:2018-01-04 07:20:02

标签: c++ winapi raii

目前我在Windows上使用WinAPI。我不喜欢尝试\ catch所以我使用RAII,这是我经常使用的构造:

#define r_free(N, T, F, n)      \
   struct N {                   \
      T res;                    \
      N() : res(NULL) {}        \
      ~N() { if (res) F(res); } \
   } n

这个宏允许我编写如下代码:

r_free(Hndl, HANDLE, ::CloseHandle, f);
DWORD err;

if(INVALID_HANDLE_VALUE == (f.res = CreateFile(argv[1], GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISING, 0, NULL))) {
   err = GetLastError();
   std::cout << err << std::endl;
   return err;
}

它工作正常,但并非所有WinAPI函数(免费资源都需要)都采用一个参数。也许有一种方法可以编辑上面的宏来解决这个问题?有什么更好的方法呢?

0 个答案:

没有答案