簡體   English   中英

基於返回類型的轉換和過載扣除

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

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