簡體   English   中英

如何檢查模板參數是否為結構/類?

[英]How to check if a template parameter is a struct/class?

對於像這樣的小示例,我只想在Tstruct/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM