C++用于调用函数的模板
C++ template for calling functions
我必须以相同的方式调用不同的函数:
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:UserscrashtuaDocumentsCppVixvix_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 *'
最后,我如何修复(或重写)我的模板以使其按预期工作?
我猜编译器将NULL
解释为int
(参见这个问题,或者更好的是,Scott Meyer的有效现代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);
}
相关文章:
- (此函数用于计算 SMA).在 FA.exe 中0x00509159引发异常: 0xC0000005:访问冲突读取位置0
- cv2有什么区别.StereoSGBM_create() 和 cv2.StereoBM_create() 函数用于 Op
- 模板 ctor 类型推导不起作用(没有匹配的构造函数用于初始化 ...)与函数<>参数
- Qt中是否有QLabel::setScaledContent等效函数用于QGraphicsScene?
- 递归函数用于计算 n 个数字之和的意外输出
- 替换(或重新实现?)std::函数用于某些统计和测试
- 如何将成员函数用于同一类的不同对象
- 为什么lambda函数用于stl函数,例如sort(),c 中的max_element()函数以两个参数为输入
- 如何在 Cython 中将C++中的模板化函数用于两种类型
- 编译库的C 挂钩函数用于调试
- 在已发布的结构中添加构造函数(用于 memcpy)是否安全?
- 没有匹配的构造函数用于初始化模板化类的构造函数
- C 无匹配函数用于呼叫错误(默认为参考通过)
- 没有匹配函数用于调用 std::transform,未解析的重载函数类型
- 函数用于随机数(C++11)
- 是否有一个函数用于遍历POSIX环境变量
- “没有匹配的构造函数用于初始化”与矢量
- 函数用于C样式字符串和C++std::string
- 有选择地内联函数(用于调试目的)
- 两个模板函数用于两种标准类型