繁体   English   中英

C ++ 11 chrono有哪些替代方案?

[英]What are the alternatives for C++11 chrono?

我正在运行下面的代码,该代码检查data_timestamp是否已使用了两周以上。 如果已使用两周以上,则打个hello否则打印world

我是Java开发人员,最近开始使用C ++。 通过互联网了解了一些东西,所以我在此程序中使用它。 我没有意识到并非所有代码都可以使用C ++ 11功能运行。

#include <ctime>
#include <chrono>
#include <iostream>

int main()
{

    uint64_t data_timestamp = 1406066507000; 

    const auto now = std::chrono::system_clock::now();
    auto twoWeeks = std::chrono::hours(24 * 14);
    auto lastTwoWeeks = now - twoWeeks;

    auto millis = std::chrono::duration_cast<std::chrono::milliseconds>(lastTwoWeeks.time_since_epoch()).count();

    std::cout << "Time stamp in milliseconds since UNIX epoch start: "<< millis << std::endl;

    if (data_timestamp < millis) { 
        std::cout << "Hello"; 
    } else { 
        std::cout << "World"; 
    }

    return 0;
}

当前,以上代码使用C ++ 11功能,但是我使用上面两周时间戳的代码逻辑的实际代码不支持C ++ 11,因此我正在寻找各种替代方法。

在这里不需要C ++ 11可移植性的我还能使用什么? 我可以在这里使用<ctime>Boost.Chrono吗?

任何与上述代码具有相同功能且不使用C ++ 11功能的简单示例都将提供很大的帮助。

更新:-

下面是我正在尝试的代码-

#include <boost/chrono/chrono.hpp>
#include <iostream>

int main()
{
    uint64_t data_timestamp = 1406066507000; 

    const auto now = boost::chrono::system_clock::now();
    auto twoWeeks = boost::chrono::hours(24 * 14);
    auto lastTwoWeeks = now - twoWeeks;

    auto millis = boost::chrono::duration_cast<boost::chrono::milliseconds>(lastTwoWeeks.time_since_epoch()).count();

    std::cout << "Time stamp in milliseconds since UNIX epoch start: "<< millis << std::endl;

    if (data_timestamp < millis) { 
        std::cout << "Hello"; 
    } else { 
        std::cout << "World"; 
    }

    return 0;
}

当我使用下面的make install -j4编译代码时,我又回来了-

warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: ânowâ does not name a type
warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: âtwoWeeksâ does not name a type
warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: âlastTwoWeeksâ does not name a type
warning: âautoâ changes meaning in C++11; please remove it [-Wc++0x-compat]
error: âmillisâ does not name a type
error: âmillisâ was not declared in this scope

我想提醒boost::chrono以来,C ++ 11级的规格在很大程度上是基于boost::date_time (提案读如这一次揭示了多少提振用作基地std::chrono )。 正如霍华德·辛南特(Howard Hinnant)所说,然后从std::chrono复制了boost::chrono std::chrono

一旦获得C ++ 11编译器,它也将使您更轻松(很容易移植到std::


一个简单的例子:

#include <boost/chrono/chrono.hpp>
#include <iostream>

int main()
{
    uint64_t data_timestamp = 1406066507000;

    const boost::chrono::system_clock::time_point now = boost::chrono::system_clock::now();
    boost::chrono::hours twoWeeks = boost::chrono::hours(24 * 14);
    boost::chrono::system_clock::time_point lastTwoWeeks = now - twoWeeks;

    boost::int_least64_t millis = boost::chrono::duration_cast<boost::chrono::milliseconds>(lastTwoWeeks.time_since_epoch()).count();

    std::cout << "Time stamp in milliseconds since UNIX epoch start: "<< millis << std::endl;

    if (data_timestamp < millis) {
        std::cout << "Hello";
    } else {
        std::cout << "World";
    }

    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM