क्योंकि आप एक अभिव्यक्ति में ज्यादा हासिल नहीं करेंगे
int x = sto("1");
टेम्पलेट पैरामीटर के लिए वांछित प्रकार को घटाने का कोई (आसान) तरीका नहीं है। आपको लिखना होगा
int x = sto<int>("1");
जो कुछ विस्तार में एक सामान्य कार्य प्रदान करने के उद्देश्य को पराजित करता है। दूसरी ओर, ए
template<typename T>
void sto(std::string x,T& t);
जैसा कि आपने महसूस किया अच्छा उपयोग होगा। C ++ 17 में हैstd::from_chars
, जो कमोबेश यही करता है (यह कोई टेम्प्लेट नहीं है, लेकिन ओवरलोड का एक सेट है और यह स्ट्रिंग के बजाय संकेत पर ले जाता है, लेकिन यह केवल मामूली विवरण है)।
PS
उपरोक्त अभिव्यक्ति में वांछित प्रकार को कम करने का कोई आसान तरीका नहीं है, लेकिन एक तरीका है। मुझे नहीं लगता कि आपके प्रश्न का मूल आप के लिए हस्ताक्षर था, और मुझे नहीं लगता कि निम्नलिखित इसे लागू करने का एक अच्छा तरीका है, लेकिन मुझे पता था कि उपरोक्त int x = sto("1");
संकलन करने का एक तरीका है और मैं इसे देखने के लिए उत्सुक था। कार्रवाई में।
#include <iostream>
#include <string>
struct converter {
const std::string& x;
template <typename T> operator T() { return 0;}
};
template <> converter::operator int() { return stoi(x); }
template <> converter::operator double() { return stod(x); }
converter sto(const std::string& x) { return {x}; }
int main() {
std::string s{"1.23"};
int x = sto(s);
double y = sto(s);
std::cout << x << " " << y;
}
यह इरादा के अनुसार काम करता है, लेकिन इसमें गंभीर गिरावट है, शायद सबसे महत्वपूर्ण रूप से यह लिखने की अनुमति देता है auto x = sto(s);
, अर्थात गलत का उपयोग करना आसान है।