如何检查模板参数是否为 struct/class?
How to check if a template parameter is a struct/class?
对于这样的小例子,如果 T
是 struct/class
,我只想接受 T
并拒绝内置类型,如 'int'、'char', 'bool'等
template<typename T>
struct MyStruct
{
T t;
};
您正在寻找 std::is_class
traits from <type_traits>
header。哪个
Checks whether T
is a non-union class type. Provides the member
constant value which is equal to true
, if T
is a class type (but not
union). Otherwise, value is equal to false
.
例如,对于模板类型 T
,您可以 static_assert
如下所示:
#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 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;
};
对于这样的小例子,如果 T
是 struct/class
,我只想接受 T
并拒绝内置类型,如 'int'、'char', 'bool'等
template<typename T>
struct MyStruct
{
T t;
};
您正在寻找 std::is_class
traits from <type_traits>
header。哪个
Checks whether
T
is a non-union class type. Provides the member constant value which is equal totrue
, ifT
is a class type (but not union). Otherwise, value is equal tofalse
.
例如,对于模板类型 T
,您可以 static_assert
如下所示:
#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 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;
};