如何使用std :: conditional选择自由函数

Nib*_*bor 1 c++ templates generic-programming

我有一些来自C库的以下形式的免费函数对:

void dvecse(int, double, double *, int);
void svecse(int, float,  float *,  int);
Run Code Online (Sandbox Code Playgroud)

我想将它们包装在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;
Run Code Online (Sandbox Code Playgroud)

此外,我尝试std::conditional了似乎仅适用于类型而不适用于自由函数的方法(带有函子的设计将是一种替代方案,但我会将所有自由函数包装在函数对象中)。

在编译时实现功能选择的简洁方法是什么?

for*_*818 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); }
Run Code Online (Sandbox Code Playgroud)

PS:我建议您使用有意义的名称。我不得不三重检查错别字。

PPS:当需要为每种类型做不同的事情时(在这里:调用各自的方法),使用模板通常不会带来太多好处。