我从C语言库中获得了很多形式如下的自由函数:
void dvecse(int, double, double *, int);
void svecse(int, float, float *, int);
我想将它们包装在C ++中,这样我就可以调用一个函数,例如vecse
,然后让编译器找出要调用的两个。
我尝试使用std::enable_if
来实现这一点,但是我不认为这是出于此目的(开/关语义代替选择),并且由于重新声明,以下类似内容显然无法编译:
template <typename T>
std::enable_if<std::is_same<T, double>::value> vecse = dvecse;
template <typename T>
std::enable_if<std::is_same<T, float>::value> vecse = svecse;
我还尝试了std::conditional
,它似乎仅适用于类型,而不适用于自由函数(带有函子的设计是一种替代方案,但我会将所有自由函数包装在函数对象中)。 / p>
在编译时实现函数选择的简洁方法是什么?
答案 0 :(得分:5)
重载时不需要模板:
void vecse(int a, double b, double* c, int d) { dvesce(a,b,c,d); }
void vecse(int a, float b, float* c, int d) { svecse(a,b,c,d); }
PS:我建议您使用有意义的名称。我不得不对错别字进行三重检查。
PPS:当需要为每种类型做不同的事情时(此处:调用相应的方法),使用模板通常不会带来太多好处。