C++ 编译器如何定义类型_traits中的类?

C++ 编译器如何定义类型_traits中的类?,c++,c++11,typetraits,C++,C++11,Typetraits,在C++11及更高版本中,标头包含许多用于类型检查的类,例如,和许多其他类 虽然我们像使用普通类一样使用这些类,但我无法找到任何可能编写这些类的定义的方法。再多的SFINAE(即使使用C++14/17规则)或其他方法似乎都无法判断类是多态的、空的还是满足其他属性。空的类仍然占用正的空间,因为该类必须具有唯一的地址 如何,编译器可以在C++中定义此类吗?或者,编译器有必要从本质上了解这些类名,并对它们进行特殊的解析?回到过去,当人们第一次在类型特征上胡闹时,他们编写了一些非常糟糕的模板代码,试图编

在C++11及更高版本中,标头包含许多用于类型检查的类,例如,和许多其他类

虽然我们像使用普通类一样使用这些类,但我无法找到任何可能编写这些类的定义的方法。再多的SFINAE(即使使用C++14/17规则)或其他方法似乎都无法判断类是多态的、空的还是满足其他属性。空的类仍然占用正的空间,因为该类必须具有唯一的地址


<>如何,编译器可以在C++中定义此类吗?或者,编译器有必要从本质上了解这些类名,并对它们进行特殊的解析?

回到过去,当人们第一次在类型特征上胡闹时,他们编写了一些非常糟糕的模板代码,试图编写可移植代码来检测某些属性。我的看法是,当编译器试图编译这些东西时过热,你必须在电脑下面放一个滴漏盘来收集熔化的金属。Edison Design Group(industrial strength compiler frontends的提供商)的Steve Adamczyk对这个问题有一个更具建设性的看法:与其编写耗费大量编译器时间并经常破坏它们的所有模板代码,不如让我提供一个帮助函数

当类型特征首次正式引入时(2006年TR1),有几个特征没有人知道如何可移植地实现。由于TR1被认为是专门添加的库,所以它们不能依赖于编译器的帮助,所以它们的规范允许它们得到偶尔出错的答案,但它们可以用可移植代码实现


如今,这些津贴已经取消;图书馆必须得到正确的答案。编译器的帮助并不是关于特定模板的专门知识;它是一个函数调用,告诉您特定类是否具有特定属性。编译器可以识别函数的名称,并提供适当的答案。这提供了一个较低级别的工具包,traits模板可以单独使用或组合使用,以确定类是否具有所讨论的trait。

我知道我以前读过这篇文章,只是不记得在哪里。这里有一个@PasserBy你是指什么?@PasserBy啊,所以