相关疑难解决方法(0)

如果Template Argument无效,请在Compile-Time检查

我正在尝试包装Windows API函数以在我选择时检查错误.正如我在之前的SO问题中发现的那样,我可以使用模板函数来调用API函数,然后调用GetLastError()以检索它可能设置的任何错误.然后,我可以将此错误传递给我的Error班级让我知道.

这是模板函数的代码:

template<typename TRet, typename... TArgs>
TRet Wrap(TRet(WINAPI *api)(TArgs...), TArgs... args)
{
    TRet ret = api(args...);
    //check for errors
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

使用这个我可以有如下代码

int WINAPI someFunc (int param1, BOOL param2); //body not accessible

int main()
{
    int ret = someFunc (5, true); //works normally
    int ret2 = Wrap (someFunc, 5, true); //same as above, but I'll get a message if there's an error
}
Run Code Online (Sandbox Code Playgroud)

这非常有效.但是,有一个可能的问题.采取这个功能

void WINAPI someFunc();
Run Code Online (Sandbox Code Playgroud)

将其转换为模板函数时,它看起来如下:

void Wrap(void(WINAPI *api)())
{
    void ret …
Run Code Online (Sandbox Code Playgroud)

c++ typechecking compile-time variadic-templates c++11

12
推荐指数
1
解决办法
4355
查看次数