使用C 模板涵盖旧的C样式功能

Covering legacy C style functions using C++ template

本文关键字:样式 功能 使用      更新时间:2023-10-16

我在c。

中具有以下两个功能
float floatAdd(float a, float b)
{
    return a+b;
}
double doubleAdd(double a, double b)
{
    return a+b;
}

现在,我想将这两个函数结合起来,并在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)
}

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

请注意,以上功能非常简单,仅用一个示例。我的目的是为某些旧的c函数提供C 模板包装器。

您的示例并没有真正表明需要使用特定功能。但是,在更一般的情况下,您可以为给定的一组模板参数为模板功能或模板类提供特定的实现。该功能称为模板专业化,专门设计用于解决此问题。

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);
}

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

template<class T>
T add(T a, T b)
{
    return a + b;
}

如果您不关心一般情况,则可以使用功能过载并忘记模板:

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