lexical_cast(std::string) 的替代方案

发布于 2024-11-27 04:54:33 字数 654 浏览 1 评论 0原文

我有使用 lexical_cast 的模板化代码。

现在我想删除所有 lexical_cast 调用(因为它不能很好地与 /clr 配合使用)。

我需要在 std::string 和它们的值之间转换对象。

所以,第一个方向很简单 (T _from, std::string _to) :

std::ostringstream os;
os << _from;
_to =  os.str();

但我想不出一种方法来通用地从字符串到任何类型(我需要一些可以与模板一起使用的通用的东西,可以'不只是对每种类型使用专门化并使用像atoi这样的函数)

编辑:

当然,我尝试过以相反的方向使用ostringstream。我收到此错误:

错误 C2784: 'std::basic_istream<_Elem,_Traits>; &std::operator >>(std::basic_istream<_Elem,_Traits> &&,_Elem *)' :无法推断出 'std::basic_istream<_Elem,_Traits> 的模板参数&&'来自 'std::ostringstream'

I've got templated code that uses lexical_cast.

Now I want to remove all the lexical_cast calls (because it doesn't work well with /clr).

I need to cast object between std::string and their value.

So, the first direction is easy (T _from, std::string _to) :

std::ostringstream os;
os << _from;
_to =  os.str();

But I can't think of a way to do it generically from a string to any type (I need something generic that will work with templates, can't just use specializations for each type and use functions like atoi)

Edit:

Of course I've tried using the ostringstream in the opposite direction. I get this error:

error C2784: 'std::basic_istream<_Elem,_Traits> &std::operator >>(std::basic_istream<_Elem,_Traits> &&,_Elem *)' : could not deduce template argument for 'std::basic_istream<_Elem,_Traits> &&' from 'std::ostringstream'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

只是一片海 2024-12-04 04:54:33

lexical_cast 使用双向流,<<>>。您也可以这样做:

std::stringstream sstr;
sstr << _from;
sstr >> _to;

不过请务必包括健全性检查。

lexical_cast uses streaming in both directions, << and >>. You could do the same:

std::stringstream sstr;
sstr << _from;
sstr >> _to;

Be sure to include sanity checks though.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文