A. *_* K. 6 c++ templates class-template c++11 c++14
对于这样的一个小例子,我只想接受T
if T
is astruct/class
并拒绝内置类型,如“int”、“char”、“bool”等。
template<typename T>
struct MyStruct
{
T t;
};
Run Code Online (Sandbox Code Playgroud)
JeJ*_*eJo 12
您正在std::is_class
从<type_traits>
标题中寻找特征。哪一个
检查是否
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;
};
Run Code Online (Sandbox Code Playgroud)
(见演示)
在 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;
};
Run Code Online (Sandbox Code Playgroud)
(见演示)