[英]Conversion and overload deduction based on return type
我在C ++核心指南中看到,最好從函數返回輸出值。
我試圖了解這對於通用代碼是否方便。
例如,為了將字符串轉換為特定值,我通常會執行以下操作:
template<class T>
T convertTo(const std::string& value)
{
// Do conversion
return convertedValue;
}
// Usage
convertTo<float>("test");
在不指定類型的情況下:
template<class T>
void convertTo(const std::string& value, T& outputValue)
{
// Do conversion
// outputValue = convertedType
}
// Usage
float myVar{};
convertTo("test", myVar);
我也知道您可以執行以下操作:
auto convertTo(const std::string& value, anotherInputPerhaps) ->decltype(myexpression)
{
// get the type to return basing on anotherInputPerhaps
return /*convertedValue*/
}
這里的問題是如何獲得正確的轉換后的值,可能無需傳遞任何輸入或使用默認值。 這可能嗎?
謝謝
[編輯]尋找不會帶來開銷的內容
您可以使用轉換運算符返回類,例如:
struct Converter
{
template <typename T>
operator T() const /*&&*/ { /*Do conversion*/ return {}; }
const std::string& s;
};
Converter convert(const std::string& value)
{
return { value };
}
用法:
float f = convert("test");
int i = convert("test");
std::vector<int> v = convert("test");
使用默認值,您還可以執行以下操作:
template<class T>
T convertTo(const std::string& value, T default_value)
{
// DO Conversion
if( conversion success)
return convertedValue;
else
return default_value;
}
並這樣稱呼它:
float myVar= DEFAULT_VALUE;
myVar = convertTo("test", myVar);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.