【问题标题】:Understanding Microsoft's _Is_duration using C++11 type_traits使用 C++11 type_traits 理解微软的 _Is_duration
【发布时间】:2014-07-30 20:24:05
【问题描述】:

我仍在学习 TMP 并使用 <type_traits>。我正在查看 Microsoft 对 std::chrono::duration_cast<T> 的实现,我希望有人能帮助我了解他们的 _Is_duration 类模板是如何工作的。感谢您的帮助。

template<class _Ty>
    struct _Is_duration
    {   // tests for duration
    static const bool value = false;
    };

// duration_cast
template<class _To,
    class _Rep,
    class _Period> inline
    typename enable_if<_Is_duration<_To>::value, _To>::type
        duration_cast(const duration<_Rep, _Period>& _Dur)
{
...
}

【问题讨论】:

  • 大概他们专门针对所有持续时间。
  • 专有软件的发布代码是非法的... :)
  • @40two 这可能是合理使用:)
  • 对不起,如果不允许,我会删除它。
  • 放轻松,伙计,我们是在开玩笑。

标签: c++ c++11 stl metaprogramming typetraits


【解决方案1】:

这不是完整的实现。它可能会部分专门用于durations,例如:

template<class _Rep,
    class _Period>
    struct _Is_duration<duration<_Rep, _Period>>
    {   // tests for duration
    static const bool value = true;
    };

因此,如果您将duration 作为类型参数传递,则将使用部分特化和value == true,否则将使用基本模板,并且value == @987654327 @。

【讨论】:

    【解决方案2】:

    它可能只是专门用于代码中其他地方的持续时间。

    【讨论】:

    • 确实如此。既然您提到了它,我进一步遵循该代码并找到另一个_Is_duration,它将持续时间作为一种类型。并且值设置为true。因此,如果强制转换类型与该定义匹配,则该值将为真。否则它遵循最初发布的代码并且是错误的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-06
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多