[英]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;
};
您正在尋找來自<type_traits>
header 的std::is_class
特征。
檢查
T
是否為非聯合 class 類型。 如果T
是 class 類型(但不是聯合),則提供等於true
的成員常量值。 否則,值等於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 中,也可以使用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;
};
(見演示)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.