[英]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.