簡體   English   中英

使用C ++模板覆蓋傳統的C風格函數

[英]Covering legacy C style functions using C++ template

我在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)

}

由於返回類型不同,我無法找到解決方案!

請注意,上述功能非常簡單,僅用作示例。 我的目的是為一些Legacy 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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM