【问题标题】:How to check if a template parameter is a struct/class?如何检查模板参数是否是结构/类?
【发布时间】:2020-11-21 16:39:38
【问题描述】:

对于像这样的小例子,如果Tstruct/class,我只想接受T,并拒绝'int'、'char'、'bool'等内置类型。

template<typename T>
struct MyStruct
{
   T t;
};

【问题讨论】:

标签: c++ c++11 templates c++14 class-template


【解决方案1】:

您正在从 &lt;type_traits&gt; 标头中寻找 std::is_class 特征。哪个

检查T 是否为非联合类类型。提供会员 等于true 的常量值,如果T 是类类型(但不是 联盟)。否则,值等于false


例如,您可以将static_assert 用于模板类型T,如下所示:

#include <type_traits> // std::is_class

template<typename T>
struct MyStruct
{
   static_assert(std::is_class<T>::value, " T must be struct/class type!");
   T t;
};

(See a demo)


concept 更新

在 C++20 中,也可以使用std::is_class 提供一个概念,如下所示。

#include <type_traits> // std::is_class

template <class T> // concept
concept is_class = std::is_class<T>::value;

template<is_class T> // use the concept
struct MyStruct
{
   T t;
};

(See a demo)

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-23
  • 2021-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多