我们如何编写一个包装词法转换函数来实现如下行:
int value = lexical_cast<int> (string)
我对编程很陌生,想知道我们如何编写函数。我不知道如何找出模板。我们也可以为 double 编写一个包装函数吗?像
double value = lexical_cast2<double> (string)
??
我们如何编写一个包装词法转换函数来实现如下行:
int value = lexical_cast<int> (string)
我对编程很陌生,想知道我们如何编写函数。我不知道如何找出模板。我们也可以为 double 编写一个包装函数吗?像
double value = lexical_cast2<double> (string)
??
如您在示例中所述,拥有它:
#include <sstream>
template <class Dest>
class lexical_cast
{
Dest value;
public:
template <class Src>
lexical_cast(const Src &src) {
std::stringstream s;
s << src;
s >> value;
}
operator const Dest &() const {
return value;
}
operator Dest &() {
return value;
}
};
包括错误检查:
template <class Src>
lexical_cast(const Src &src) throw (const char*) {
std::stringstream s;
if (!(s << src) || !(s >> value) || s.rdbuf()->in_avail()) {
throw "value error";
}
}
你可以尝试这样的事情:
#include <sstream>
#include <iostream>
template <class T>
void FromString ( T & t, const std::string &s )
{
std::stringstream str;
str << s;
str >> t;
}
int main()
{
std::string myString("42.0");
double value = 0.0;
FromString(value,myString);
std::cout << "The answer to all questions: " << value;
return 0;
}
如果这不是练习,并且您的目标只是将字符串转换为其他类型:
如果您使用的是 C++11,则有新的转换函数。
所以你可以做类似的事情
std::stoi -> int
std::stol -> long int
std::stoul -> unsigned int
std::stoll -> long long
std::stoull -> unsigned long long
std::stof -> float
std::stod -> double
std::stold -> long double
http://www.cplusplus.com/reference/string/
如果不是 C++11,你可以使用
int i = atoi( my_string.c_str() )
double l = atof( my_string.c_str() );
您可以简单地使用此标头。to<std::string>(someInt)
并写出or之类的东西to<unsigned byte>(1024)
。第二部分会抛出并告诉你你在做坏事。