【问题标题】:stoi and std::to_string on mingw 4.7.1 [duplicate]mingw 4.7.1 上的 stoi 和 std::to_string [重复]
【发布时间】:2013-01-23 05:02:56
【问题描述】:

好吧,我想将我的 C++11 程序移植到 Windows,但在 mingw 4.7.1 中似乎没有实现 stoi 和 std::to_string。我知道有人问过它并且有一个解决方案来编辑​​一些标题,但是在我的 mingw 版本(4.7.1 附带 codelite)中,标题是不同的,并且没有我必须移动的确切行(可能是因为答案是对于 mingw 4.6)。

所以我的问题是如何在 mingw 4.7 上获得这些功能? 是否有任何指南可以在 4.7 中更改标题,或者它可能会包含在 4.8 中?

当然有 boost::lexical_cast,但我想保持我的代码不变,所以我正在寻找如何在 mingw 中启用这些功能的解决方案。

也许有一些自定义的 mingw 发行版支持这些功能?

【问题讨论】:

    标签: c++ c++11 mingw std


    【解决方案1】:

    Mingw 使用 Windows API,而 Windows 没有提供用于实现 to_stringvswprintf 函数的符合版本,怪罪微软。

    如果您使用(非常)最新版本的 mingw-w64 fork 和未发布的 GCC 4.8 版本,那么它可以工作,但您对主要的 mingw32 和 GCC 4.7.1 不太走运

    如果您愿意修补您的实施,您可以尝试http://tehsausage.com/mingw-to-string 提供的解决方案,但请仔细阅读注意事项。

    更新:

    似乎只有std::to_wstring 受到损坏的vswprintf 函数的影响,所以我对GCC 4.9.3(及更高版本)进行了更改,它将定义std::stoistd::stod、@987654332 @ 等用于 MinGW,而将 to_wstring 保留为未定义。

    如果您想自己编辑 4.7.1 标头,这里是相关补丁:

    --- a/home/jwakely/gcc/4.7.1/include/c++/4.7.1/bits/basic_string.h
    +++ b/home/jwakely/gcc/4.7.1/include/c++/4.7.1/bits/basic_string.h.fix
    @@ -2808,8 +2808,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
     _GLIBCXX_END_NAMESPACE_VERSION
     } // namespace
    
    -#if (defined(__GXX_EXPERIMENTAL_CXX0X__) && defined(_GLIBCXX_USE_C99) \
    -     && !defined(_GLIBCXX_HAVE_BROKEN_VSWPRINTF))
    +#if (defined(__GXX_EXPERIMENTAL_CXX0X__) && defined(_GLIBCXX_USE_C99)
    
     #include <ext/string_conversions.h>
    
    @@ -2959,6 +2958,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
       stold(const wstring& __str, size_t* __idx = 0)
       { return __gnu_cxx::__stoa(&std::wcstold, "stold", __str.c_str(), __idx); }
    
    +#ifndef _GLIBCXX_HAVE_BROKEN_VSWPRINTF
       // DR 1261.
       inline wstring
       to_wstring(int __val)
    @@ -3021,6 +3021,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
                                                L"%Lf", __val);
       }
     #endif
    +#endif
    
     _GLIBCXX_END_NAMESPACE_VERSION
     } // namespace
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-22
    • 2012-10-10
    相关资源
    最近更新 更多