我正在嘗試使用variadic模板編寫sum
函數。 在代碼中,我會寫類似從字符數組類型演繹到std :: string
sum(1, 2., 3)
,它將返回總和的最普遍的類型(在這種情況下 - double
)。 問題在於字符。當我這樣稱呼它
sum("Hello", " ", "World!")
模板參數推導爲const char [7]
例如,因此它不會編譯。我找到了指定最後一個參數爲std::string("World!")
的方法,但它並不漂亮,有沒有什麼辦法實現自動類型扣除到std::string
或正確過載sum
?
的代碼,我到目前爲止有:
template<typename T1, typename T2>
auto sum(const T1& t1, const T2& t2) {
return t1 + t2;
}
template<typename T1, typename... T2>
auto sum(const T1& t1, const T2&... t2) {
return t1 + sum(t2...);
}
int main(int argc, char** argv) {
auto s1 = sum(1, 2, 3);
std::cout << typeid(s1).name() << " " << s1 << std::endl;
auto s2 = sum(1, 2.0, 3);
std::cout << typeid(s2).name() << " " << s2 << std::endl;
auto s3 = sum("Hello", " ", std::string("World!"));
std::cout << typeid(s3).name() << " " << s3 << std::endl;
/* Won't compile! */
/*
auto s4 = sum("Hello", " ", "World!");
std::cout << typeid(s4).name() << " " << s4 << std::endl;
*/
return 0;
}
輸出:
i 6
d 6
Ss Hello World!
您正在使用C++ 14,所以''World!「s'。 –
@ T.C。我試過這[ideone](http://ideone.com/3fRo0M),但我有一個編譯錯誤,我做錯了嗎? – NikolayKondratyev
你需要一個'using namespace std :: literals;'。 –