다음과 같은 표현으로 인해 많이 얻지 못할 것입니다.
int x = sto("1");
템플릿 매개 변수에 대해 원하는 유형을 추론 할 수있는 쉬운 방법이 없습니다. 당신은 작성해야
int x = sto<int>("1");
어느 정도까지는 일반적인 기능을 제공한다는 목적을 상실합니다. 반면에
template<typename T>
void sto(std::string x,T& t);
당신이 깨달은대로 잘 사용됩니다. C ++ 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);
. 즉, 잘못 사용하기 쉽습니다.