使用C++模板覆盖传统的C风格函数

Soo*_*Soo 2 c++ templates c++11

我在C中有以下两个函数.

float floatAdd(float a, float b)
{
    return a+b;
}

double doubleAdd(double a, double b)
{
    return a+b;
}
Run Code Online (Sandbox Code Playgroud)

现在,我想结合两个函数并在C++中编写一个tempalte函数,如下所示.

template<class T>
T add(T a, T b)
{
    // if T=float, return floatAdd(a,b)
    // if T=double, return doubleAdd(a,b)

}
Run Code Online (Sandbox Code Playgroud)

由于返回类型不同,我无法找到解决方案!

请注意,上述功能非常简单,仅用作示例.我的目的是为一些Legacy C函数提供一个C++模板包装器.

Fra*_*eux 7

您的示例并未真正显示使用特定功能的必要性.但在更一般的情况下,您可以为给定的模板参数集提供模板函数或模板类的特定实现.该功能称为模板专业化,专门用于解决此问题.

template<class T>
T add(T a, T b);

// Special implementation for floatAdd
template<>
float add<float>(float a, float b)
{
    return floatAdd(a, b);
}

// Special implementation for floatDouble
template<>
double add<double>(double a, double b)
{
    return doubleAdd(a, b);
}
Run Code Online (Sandbox Code Playgroud)

对于这种简单的情况,您可以简单地使用常规模板:

template<class T>
T add(T a, T b)
{
    return a + b;
}
Run Code Online (Sandbox Code Playgroud)

如果你不关心支持一般情况,你可以只使用函数重载并忘记模板:

float add(float a, float b)
{
    return floatAdd(a, b);
}

double add(double a, double b)
{
    return doubleAdd(a, b);
}
Run Code Online (Sandbox Code Playgroud)