我在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*/
}
这里的问题是如何获得正确的转换后的值,可能无需传递任何输入或使用默认值。这可能吗?
谢谢
[EDIT]寻找不会带来开销的东西
答案 0 :(得分:3)
您可以使用转换运算符返回类,例如:
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");
答案 1 :(得分:2)
使用默认值,您还可以执行以下操作:
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);