C++ 使用stringstream将字符串转换为数字
我想实现如下功能:C++ 使用stringstream将字符串转换为数字,c++,templates,stringstream,C++,Templates,Stringstream,我想实现如下功能: template <class C> C string_to_number(const string &s){ stringstream ss(s); C num; ss >> num; return num; } int main() { string s = "12.75"; double d = string_to_number(s); // be 12.75 int i = st
template <class C>
C string_to_number(const string &s){
stringstream ss(s);
C num;
ss >> num;
return num;
}
int main()
{
string s = "12.75";
double d = string_to_number(s); // be 12.75
int i = string_to_number(s); // be 12
}
有人知道有什么办法吗?模板参数
C
仅用作函数返回值的类型,而不是函数参数,不能使用
如果可能,编译器将从函数参数推断缺少的模板参数
必须显式指定模板参数,例如
double d = string_to_number<double>(s); // be 12.75
int i = string_to_number<int>(s); // be 12
double d=字符串到数字;//12点75分
int i=字符串到数字;//十二岁
走这条线
double d = string_to_number(s); // be 12.75
编译器必须实例化函数模板string\u到\u number
。对于模板参数的推导,既没有显式的模板参数列表,也没有可从中推导的函数参数。除此之外,没有其他机制来推断模板参数。特别是,正如您的代码所建议的,模板参数推断将不考虑返回值
由于函数参数不依赖于模板参数,因此必须指定显式模板参数:
double d = string_to_number<double>(s); // be 12.75
可通过以下方式模拟退货类型扣减:
#包括
#包括
类别字符串到最终编号
{
公众:
字符串到字符串编号(常量标准::字符串和字符串)
:string_u{string}
{
}
字符串到编号(常量字符串到编号&)=删除;
模板
运算符类型()常量&&
{
std::stringstream string_stream{string_};
类型值;
字符串\u流>>值;
返回值;
}
私人:
const std::string和string_u2;;
};
// ...
std::string s=“12.75”;
双d=字符串到数字;//12点75分
int i=字符串到数字;//十二岁
auto d = string_to_number<double>(s); // be 12.75
#include <sstream>
#include <string>
class string_to_number final
{
public:
string_to_number(const std::string& string)
: string_{string}
{
}
string_to_number(const string_to_number&) = delete;
template <class Type>
operator Type() const &&
{
std::stringstream string_stream{string_};
Type value;
string_stream >> value;
return value;
}
private:
const std::string& string_;
};
// ...
std::string s = "12.75";
double d = string_to_number(s); // be 12.75
int i = string_to_number(s); // be 12