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"部分可能非常长.
这个问题有一个简单的解决方案吗?
谢谢
兹德涅克
定义重载的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)
| 归档时间: |
|
| 查看次数: |
1346 次 |
| 最近记录: |