在c ++ 11中调用模板参数的函数,其中模板参数为chrono :: system_clock

rkb
     template< class CLOCK >
    std::string print_date_time( typename CLOCK::time_point p_time ){

        std::stringstream ss;

        std::time_t t = CLOCK::to_time_t(p_time);
        ss << std::ctime(&t) << std::endl;

        return ss.str();
    }

int main(){
std::cout << print_date_time( std::chrono::system_clock::now() );

}

我确实提供了适当的文件,让我知道哪里出了问题。

炸鱼

我只是将答案作为一大堆代码转储在这里,因为恐怕我对模板参数推导没有很好的解释。

我认为这是一起做的std::chrono::system_clock::time_point是一typedefstd::chrono::time_point<std::chrono::system_clock>,但我不知道,而且我希望有人将有一个很好的解释一起走。在那之前,我只是转储2个可行的解决方案。

#include <chrono>
#include <string>
#include <sstream>
#include <iostream>

template< class CLOCK >
std::string print_date_time( typename CLOCK::time_point p_time ){

    std::stringstream ss;

    std::time_t t = CLOCK::to_time_t(p_time);
    ss << std::ctime(&t) << std::endl;

    return ss.str();
}

// You can do this
template< class CLOCK >
std::string print_date_time_2( typename std::chrono::time_point<CLOCK> p_time ){

    std::stringstream ss;

    std::time_t t = CLOCK::to_time_t(p_time);
    ss << std::ctime(&t) << std::endl;

    return ss.str();
}


// Or this
template< class TIME_POINT >
std::string print_date_time_3( TIME_POINT p_time ){

    std::stringstream ss;

    std::time_t t = TIME_POINT::clock::to_time_t(p_time);
    ss << std::ctime(&t) << std::endl;

    return ss.str();
}


int main()
{
    std::cout
        << print_date_time
            <std::chrono::system_clock> // You don't want this!!
                                        // But without it you get template
                                        // argument deduction errors.
            (std::chrono::system_clock::now())
        << '\n';


    std::cout
        << print_date_time_2
            (std::chrono::system_clock::now())
        << '\n';

    std::cout
        << print_date_time_3
            (std::chrono::system_clock::now())
        << '\n';
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

std :: chrono :: system_clock和C时间

C ++向chrono :: system_clock :: time_point添加月份

std :: chrono :: system_clock与std :: chrono :: high_resolution_clock行为

如何从std :: chrono :: system_clock :: time_point.time_since_epoch()。count()中获取std :: chrono :: system_clock :: time_point?

std :: chrono中是否有设施可以协助注入system_clock进行单元测试

与gfortran链接时未定义对`std :: chrono :: _ V2 :: system_clock :: now()'的引用

二进制'> =':'std :: chrono :: system_clock :: time_point'

考虑操作系统配置的时区的std :: chrono :: system_clock :: now()

将std :: chrono :: system_clock :: time_point转换为struct timeval并返回

在哪里可以找到std :: chrono :: system_clock :: now()的GCC 9实现?

为什么std :: chrono :: system_clock :: to_time_t()不是constexpr?

为什么coliru对于chrono :: system_clock :: now()。time_since_epoch()返回相同的值?

如何将“std::chrono::system_clock::now()”转换为双倍

使用boost :: chrono :: system_clock获取时间会导致链接器错误

将POSIX时代获取为system_clock :: time_point

调用类内的函数的C ++ 11可变参数模板

我怎么知道我的`std :: chrono :: high_resolution_clock`对应于`steady_clock`或`system_clock`或其他别名?

成员函数指针的decltype作为c ++ 11中的模板参数

在C ++中对模板参数调用静态函数

如何将YYYY / MM / DD HH:MM:SS转换为std :: chrono :: system_clock :: time_point?

C ++使函数调用取决于模板参数

C ++模板参数作为函数调用名称

C ++ 11模板中的默认位置参数

在C ++ 11中枚举布尔模板参数

C ++ 11:可变参数模板函数参数的数量?

C ++ 11中具有多个模板参数的模板函数的专业化

C ++模板显式实例化,其中模板参数为类模板

C ++中函数类型的模板参数

C ++ 14中的模板化函数参数