C++ 从双秒到标准::计时::稳定时钟::持续时间的简洁转换?

C++ 从双秒到标准::计时::稳定时钟::持续时间的简洁转换?,c++,chrono,C++,Chrono,我可以这样做: double period_in_seconds = 3.4; auto as_duration = std::chrono::duration_cast<std::chrono::steady_clock::duration>(std::chrono::duration<double>(period_in_seconds)); 双周期(单位:秒)=3.4; 自动作为持续时间=std::chrono::duration_cast(std::chrono

我可以这样做:

double period_in_seconds = 3.4;

auto as_duration = std::chrono::duration_cast<std::chrono::steady_clock::duration>(std::chrono::duration<double>(period_in_seconds));
双周期(单位:秒)=3.4;
自动作为持续时间=std::chrono::duration_cast(std::chrono::duration(以秒为单位的周期));
但我相信你会同意这很荒谬。有更简洁的方法吗


编辑:除了明显的
使用名称空间std::chrono

之外,还有一个很好的理由来阻止在文件范围内使用
名称空间,特别是在标题中。然而,在函数范围内,尤其是对于
库,
使用名称空间std::chrono
是您的朋友

仅此步骤就可以帮助您:

double period_in_seconds = 3.4;
auto as_duration = std::chrono::duration_cast<std::chrono::steady_clock::duration>(std::chrono::duration<double>(period_in_seconds));
最后,即使在本地范围内创建自定义持续时间,也不要犹豫,以提高可读性:

double period_in_seconds = 3.4;
using namespace std::chrono;
using dsec = duration<double>;
auto as_duration = round<steady_clock::duration>(dsec{period_in_seconds});
如果此代码打算在文件范围内,而您不希望在文件范围内使用这些代码(这是完全可以理解的),只需创建一个函数来封装它们:

constexpr
std::chrono::steady_clock::duration
get_period(double period_in_seconds)
{
    using dsec = std::chrono::duration<double>;
    using duration = std::chrono::steady_clock::duration;
    using std::chrono::round;
    return round<duration>(dsec{period_in_seconds});
}

auto constexpr as_duration = get_period(3.4);

std::chrono::seconds
?编写函数?可能是
使用命名空间std::chrono在本地范围内或使用其他别名?
std::chrono::seconds
仅测量我所能看到的整数秒数。
double period_in_seconds = 3.4;
using namespace std::chrono;
using dsec = duration<double>;
auto as_duration = round<steady_clock::duration>(dsec{period_in_seconds});
double period_in_seconds = 3.4;
using dsec = std::chrono::duration<double>;
using duration = std::chrono::steady_clock::duration;
using std::chrono::round;
auto as_duration = round<duration>(dsec{period_in_seconds});
constexpr
std::chrono::steady_clock::duration
get_period(double period_in_seconds)
{
    using dsec = std::chrono::duration<double>;
    using duration = std::chrono::steady_clock::duration;
    using std::chrono::round;
    return round<duration>(dsec{period_in_seconds});
}

auto constexpr as_duration = get_period(3.4);
    .globl  _as_duration            ## @as_duration
    .p2align    3
_as_duration:
    .quad   3400000000              ## 0xcaa7e200