用于调用函数的C ++模板

rashtua

我必须以相同的方式调用不同的函数:

VixHandle jobHandle = VIX_INVALID_HANDLE;
jobHandle = VixHost_Connect(VIX_API_VERSION, provider, host.c_str(), 0, user.c_str(), password.c_str(), 0, VIX_INVALID_HANDLE,NULL, NULL);
VixHandle result = Vix_waitJobResult(jobHandle);

我想简化源代码,并使用如下代码:

template <typename FUNC, typename ... ARGS>
VixHandle VIX_CALL(FUNC fun, ARGS ... arg){
    VixHandle result = VIX_INVALID_HANDLE;
    VixHandle jobHandle = VIX_INVALID_HANDLE;
    jobHandle = fun(arg...);
    result = Vix_waitJobResult(jobHandle);
    Vix_ReleaseHandle(jobHandle);
    return result;
}

并使呼叫看起来像:

VixHandle hostHandle = VIX_CALL(VixHost_Connect, VIX_API_VERSION, provider, host.c_str(), 0, user.c_str(), password.c_str(), 0, VIX_INVALID_HANDLE,NULL, NULL);

显然,我的模板不起作用,而且我不确定如何修复它:

C:\Users\crashtua\Documents\CppVix\vix_api_helper.h:12: error: C2664: 'VixHandle (int,VixServiceProvider,const char *,int,const char *,const char *,VixHostOptions,VixHandle,VixEventProc (__cdecl *),void *)': cannot convert argument 10 from 'int' to 'void *'

最后,如何修复(或重写)我的模板以使其按预期工作?

阿米·塔沃里(Ami Tavory)

我猜编译器会解释NULLint(请参阅此问题,或者更好的是,Scott Meyer的《Effective Modern C ++》)。知道意图是一个指针,但是编译器不是。您应该使用nullptr

在下面的示例中,请参见make_vix_2的呼叫:

#include <utility>
class vix_handle{};
template<class Fn, typename ...Args>
void vix_call(Fn fn, Args &&...args)
{
    vix_handle job_handle = fn(std::forward<Args>(args)...);
}

vix_handle make_vix_0(int, int, int){return vix_handle();}
vix_handle make_vix_1(float){return vix_handle();}
vix_handle make_vix_2(char *){return vix_handle();}

int main()
{
    vix_call(make_vix_0, 1, 2, 3);
    vix_call(make_vix_1, 1.0);
    vix_call(make_vix_2, nullptr);                                                                                                          
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从C文件调用模板函数

来自分类Dev

模板函数的调用顺序,用于模板参数的顺序

来自分类Dev

将模板参数应用于函数而不调用函数?

来自分类Dev

C ++ 11:可变参数lambda模板,用于调用类型的默认构造函数

来自分类Dev

模板类特化函数调用。C ++

来自分类Dev

函数调用运算符的C ++模板

来自分类Dev

C ++模板和模糊函数调用

来自分类Dev

C ++:转发模板成员函数调用失败

来自分类Dev

函数指针类型的c ++模板调用

来自分类Dev

C ++继承:调用模板的子类函数

来自分类Dev

C ++模板和模糊函数调用

来自分类Dev

调用模板函数C ++时出错

来自分类Dev

c ++调用模板构造函数实例化

来自分类Dev

从模板多次调用的函数

来自分类Dev

模板函数未调用

来自分类Dev

从模板调用组件函数

来自分类Dev

调用模板成员函数

来自分类Dev

C ++:调用模板化类的非模板化函数

来自分类Dev

C ++如何使用模板类调用模板函数?

来自分类Dev

C ++模板:从基类调用派生模板类的成员函数

来自分类Dev

MinGW从模板调用模板

来自分类Dev

模板内的调用模板

来自分类Dev

从模板函数调用静态模板方法

来自分类Dev

模板模板类,如果存在则调用函数

来自分类Dev

模板函数调用歧义错误

来自分类Dev

从Twig模板调用PHP函数

来自分类Dev

无法调用的模板构造函数?

来自分类Dev

使用模板的条件函数调用

来自分类Dev

在模板中调用Flask函数