আপনি বেশি কিছু পাবেন না কারণ মত প্রকাশের মধ্যে
int x = sto("1");
টেমপ্লেট প্যারামিটারের জন্য কাঙ্ক্ষিত ধরণের অনুমিত করার কোনও (সহজ) উপায় নেই। আপনাকে লিখতে হবে
int x = sto<int>("1");
যা কিছুটা বাড়িয়ে জেনেরিক ফাংশন সরবরাহের উদ্দেশ্যকে পরাস্ত করে। অন্যদিকে, ক
template<typename T>
void sto(std::string x,T& t);
আপনি যেমন বুঝতে পেরেছিলেন তেমন কাজে আসবে। সি ++ 17 এ রয়েছে std::from_chars
যা কমবেশি ঠিক এমনটি করে (এটি কোনও টেমপ্লেট নয় বরং ওভারলোডের সেট এবং এটি স্ট্রিংয়ের পরিবর্তে চরগুলিতে পয়েন্টার নেয়, তবে কেবলমাত্র ছোটখাটো বিশদ বিবরণ দেয়)।
পিএস
উপরের অভিব্যক্তিতে পছন্দসই ধরণের অনুমিত করার কোনও সহজ উপায় নেই তবে একটি উপায় আছে। আমি মনে করি না যে আপনার প্রশ্নের মূলটি হ'ল স্বাক্ষরটি যা আপনি চেয়েছিলেন, এবং আমি এটির প্রয়োগের জন্য নীচেরটি একটি ভাল উপায় বলে মনে করি না, তবে আমি জানতাম যে উপরের 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);
, অর্থাত ভুলটি ব্যবহার করা সহজ।