C++ 检查模板参数是否为某种类型的chrono::duration

C++ 检查模板参数是否为某种类型的chrono::duration,c++,c++11,C++,C++11,给定 模板 结构时间数据 { T持续时间; } 如果T是某种类型的std::chrono::duration,如何编写static\u assert来检查编译时?记住std::chrono::duration是一个模板类 换句话说,如何检查类型是否是模板类的某个实例化?您可以实现自己的类型特征来检查chrono::duration。大概是这样的: template<class T> struct TimeData { T duration; } 模板 结构是_duration

给定

模板
结构时间数据
{
T持续时间;
}
如果
T
是某种类型的
std::chrono::duration
,如何编写
static\u assert
来检查编译时?记住
std::chrono::duration
是一个模板类


换句话说,如何检查类型是否是模板类的某个实例化?

您可以实现自己的类型特征来检查
chrono::duration
。大概是这样的:

template<class T>
struct TimeData
{
  T duration;
}
模板
结构是_duration:std::false _type{};
模板
结构是_duration:std::true_type{};
然后你可以:

template<class T>
struct is_duration : std::false_type {};

template<class Rep, class Period>
struct is_duration<std::chrono::duration<Rep, Period>> : std::true_type {};
static_断言(is_duration::value,“必须是duration”);

Username签出
static_assert(is_duration<T>::value, "must be duration");