我想實作一個功能,如題所述,例如:
cout << SumValue("abc", string("abcd"), 1.3, 1, 10, 2, 100) << endl;
我想要那個 C 代碼段輸出114.3,和的總和1.3, 1, 10, 2 and 100,忽略"abc"和string("abcd")。
我已經嘗試了可變模板函式并將<type_traits>lib用作以下代碼:
template <typename T>
long double SumValue(T first)
{
if (is_arithmetic<T>::value)
return first;
else
return 0;
}
template <typename T, typename... Args>
long double SumValue(T first, Args... args)
{
if (is_arithmetic<T>::value)
return first SumValue(args...);
else
return SumValue(args...);
}
但是編譯器報錯:
error: invalid operands of types 'const char*' and 'long double' to binary 'operator '
return first SumValue(args...);
~~~~~~^~~~~~~~~~~~~~~~~~~
我可以理解所描述的錯誤,但是我無法找到解決方案。
uj5u.com熱心網友回復:
您可以在SFINAESumValue的幫助下超載。
template <typename T>
typename std::enable_if<std::is_arithmetic<T>::value, long double>::type
SumValue(T first)
{
return first;
}
template <typename T>
typename std::enable_if<!std::is_arithmetic<T>::value, long double>::type
SumValue(T first)
{
return 0;
}
template <typename T, typename... Args>
long double SumValue(T first, Args... args)
{
return SumValue(first) SumValue(args...);
}
居住
順便說一句:從 C 17 開始,您可以使用Constexpr If。
template <typename T>
long double SumValue(T first)
{
if constexpr (std::is_arithmetic<T>::value)
return first;
else
return 0;
}
template <typename T, typename... Args>
long double SumValue(T first, Args... args)
{
return SumValue(first) SumValue(args...);
}
居住
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/436228.html
下一篇:通過std::pair<std::array<std::array<u_int16_t,2>,1>,std::string>>直接讀取參考值
