根据C++模板类型调用不同的C函数

Zde*_*usa 1 c c++ macros templates

我的问题如下:我有一个C库,它包含每个函数的几个版本,根据它们使用的数据类型,例如:

void add(double *a, double *b, double *c);
Run Code Online (Sandbox Code Playgroud)

void sadd(float *a, float *b, float *c);
Run Code Online (Sandbox Code Playgroud)

现在,有了一个外部C++模板函数,我希望能够做到这样的事情:

template<class T>
void myfunc(/*params*/)
{
 // Obtain a,b,c of type T* from params

/*
 If T is double call add(a,b,c);
 else if T is float call sadd(a,b,c).
*/ 
}
Run Code Online (Sandbox Code Playgroud)

我知道它可以通过专门的模板函数来完成,例如:

template<>
void myfunc<double>(/*params*/)
{
  // Obtain a,b,c of type double* from params
  add(a,b,c);
}
Run Code Online (Sandbox Code Playgroud)

等等,但它并不是一个真正的选择,因为引入模板化C++函数的重点是减少代码重复,"//从params获取类型T*的a,b,c"部分可能非常长.

这个问题有一个简单的解决方案吗?

谢谢

兹德涅克

Dan*_*rey 9

定义重载的C++转发器:

inline void forward_add(double *a, double *b, double *c) { add( a, b, c ); }
inline void forward_add(float *a, float *b, float *c) { sadd( a, b, c ); }

template<class T>
void myfunc(/*params*/)
{
   // Obtain a,b,c of type T* from params
   forward_add( a, b, c );
}
Run Code Online (Sandbox Code Playgroud)