相关疑难解决方法(0)

C++ 11替代localtime_r

C++根据strftime需要定义时间格式化函数,这需要struct tm"分解时间"记录.但是,C和C++ 03语言没有提供线程安全的方法来获取这样的记录; struct tm整个计划只有一位大师.

在C++ 03中,这或多或少都可以,因为该语言不支持多线程; 它只支持支持多线程的平台,然后提供像POSIX这样的设施localtime_r.

C++ 11还确定了新的时间公用事业,与非破旧的接口time_t类型,这什么会被用来重新初始化全局struct tm.但获得一个time_t不是问题.

我错过了什么或者这项任务是否还需要依赖POSIX?

编辑:这是一些解决方法代码.它保持与::localtime_r提供仅提供的单线程环境的多线程环境的兼容性std::localtime.它可以很容易地适应检查其它功能,如posix::localtime_r::localtime_s或什么都有,你.

namespace query {
    char localtime_r( ... );

    struct has_localtime_r
        { enum { value = sizeof localtime_r( std::declval< std::time_t * >(), std::declval< std::tm * >() )
                        == sizeof( std::tm * ) }; };


    template< bool available > struct safest_localtime {
        static std::tm *call( std::time_t …
Run Code Online (Sandbox Code Playgroud)

c++ time strftime c++11

35
推荐指数
1
解决办法
1万
查看次数

标签 统计

c++ ×1

c++11 ×1

strftime ×1

time ×1