【发布时间】:2020-11-21 16:39:38
【问题描述】:
对于像这样的小例子,如果T 是struct/class,我只想接受T,并拒绝'int'、'char'、'bool'等内置类型。
template<typename T>
struct MyStruct
{
T t;
};
【问题讨论】:
标签: c++ c++11 templates c++14 class-template
对于像这样的小例子,如果T 是struct/class,我只想接受T,并拒绝'int'、'char'、'bool'等内置类型。
template<typename T>
struct MyStruct
{
T t;
};
【问题讨论】:
标签: c++ c++11 templates c++14 class-template
您正在从 <type_traits> 标头中寻找 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;
};
在 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;
};