- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
C++ 11提供了标准的<type_traits>
。
没有编译器挂钩,它们中的哪一个是不可能实现的?
__is_builtin...
。 最佳答案
我已经写了一个完整的答案here-这项工作仍在进行中,因此即使我将文本剪切并粘贴到此答案中,我也会提供权威的超链接。
另请参见libc++的Type traits intrinsic design文档。
is_unionis_union
查询未通过任何其他方式公开的类的属性;
在C++中,您可以使用类或结构进行的任何操作,也可以使用联合进行的操作。这个
包括继承和获取成员指针。
is_aggregate,is_literal_type,is_pod,is_standard_layout,has_virtual_destructor
这些特征查询未通过任何其他方式公开的类的属性。
本质上,结构或类是“黑匣子”。 C++语言使我们无法
将其打开并检查其数据成员,以了解它们是否都是POD类型,或者是否
它们中的任何一个都是private
,或者该类具有任何constexpr构造函数(键is_literal_type
的要求)。
is_abstractis_abstract
是一个有趣的案例。摘要的定义特征
类类型是您无法获得该类型的值;所以例如
格式不正确,以定义其参数或返回类型为抽象的函数,并且
创建元素类型为抽象的数组类型的格式不正确。
(奇怪的是,如果T
是抽象的,那么SFINAE将适用于T[]
,而不适用于T()
。
是否可以使用抽象的返回类型创建函数的类型;
定义这种功能类型的实体格式不正确。)
因此,我们可以使用以下方法非常接近is_abstract
的正确实现
这种SFINAE方法:
template<class T, class> struct is_abstract_impl : true_type {};
template<class T> struct is_abstract_impl<T, void_t<T[]>> : false_type {};
template<class T> struct is_abstract : is_abstract_impl<remove_cv_t<T>, void> {};
T
本身是模板类,例如
vector<T>
或
basic_ostream<char>
,那么仅形成
T[]
类型是可以接受的;在
T
的主体,因此编译器将不会检测到
T[]
。因此,在那种情况下SFINAE不会发生,我们将
is_abstract<basic_ostream<char>>
给出错误的答案。
__is_abstract(T)
。
is_final
查询未通过任何其他方式公开的类的属性。
enable_if_t
询问“我可以创建一个从
T
派生的类吗?”因为如果我们
is_empty
是一个有趣的案例。我们不能只问是否是
sizeof (T) == 0
,因为
sizeof (T) == 1
。
struct Derived : public T { int x; };
struct Underived { int x; };
Derived
中为空白留出任何空间
T
子对象。这表明我们至少可以在C++ 03中测试“空”的方法
sizeof (Derived) == sizeof (Underived)
。不幸的是,从C++ 11开始,
T
可能是最终的,并且该类的“最终性”
final
的编译器供应商
__is_empty(T)
的内容,以使标准库受益。
is_enum
是另一个有趣的情况。从技术上讲,我们可以实现这种类型特征
T
类型不是基本类型,即数组类型,
__is_enum(T)
。
__int128_t
。 libc++实际上检测到
__int128_t
的存在并包括
vector int
,它支持Altivec vector 扩展。
is_trivially_copy_constructible<T>
在以下方面实现
is_trivially_constructible<T, const T&>
,依此类推。
__is_trivially_destructible(T)
而是
__has_trivial_destructor(T)
。此外,事实证明内置
true
!所以我们首先需要
sizeof(T)
并将其与所有已知类型的大小进行比较,并询问
T(-1) < T(0)
获得底层类型的签名;但是这种方法仍然
int
和
long
在平台上的类型
long
和
long long
之间也不相同)
关于c++ - 没有编译器 Hook ,哪些<type_traits>无法实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20181702/
我通过 spring ioc 编写了一些 Rest 应用程序。但我无法解决这个问题。这是我的异常(exception): org.springframework.beans.factory.BeanC
我对 TestNG、Spring 框架等完全陌生,我正在尝试使用注释 @Value通过 @Configuration 访问配置文件注释。 我在这里想要实现的目标是让控制台从配置文件中写出“hi”,通过
为此工作了几个小时。我完全被难住了。 这是 CS113 的实验室。 如果用户在程序(二进制计算器)结束时选择继续,我们需要使用 goto 语句来到达程序的顶部。 但是,我们还需要释放所有分配的内存。
我正在尝试使用 ffmpeg 库构建一个小的 C 程序。但是我什至无法使用 avformat_open_input() 打开音频文件设置检查错误代码的函数后,我得到以下输出: Error code:
使用 Spring Initializer 创建一个简单的 Spring boot。我只在可用选项下选择 DevTools。 创建项目后,无需对其进行任何更改,即可正常运行程序。 现在,当我尝试在项目
所以我只是在 Mac OS X 中通过 brew 安装了 qt。但是它无法链接它。当我尝试运行 brew link qt 或 brew link --overwrite qt 我得到以下信息: ton
我在提交和 pull 时遇到了问题:在提交的 IDE 中,我看到: warning not all local changes may be shown due to an error: unable
我跑 man gcc | grep "-L" 我明白了 Usage: grep [OPTION]... PATTERN [FILE]... Try `grep --help' for more inf
我有一段代码,旨在接收任何 URL 并将其从网络上撕下来。到目前为止,它运行良好,直到有人给了它这个 URL: http://www.aspensurgical.com/static/images/a
在过去的 5 个小时里,我一直在尝试在我的服务器上设置 WireGuard,但在完成所有设置后,我无法 ping IP 或解析域。 下面是服务器配置 [Interface] Address = 10.
我正在尝试在 GitLab 中 fork 我的一个私有(private)项目,但是当我按下 fork 按钮时,我会收到以下信息: No available namespaces to fork the
我这里遇到了一些问题。我是 node.js 和 Rest API 的新手,但我正在尝试自学。我制作了 REST API,使用 MongoDB 与我的数据库进行通信,我使用 Postman 来测试我的路
下面的代码在控制台中给出以下消息: Uncaught DOMException: Failed to execute 'appendChild' on 'Node': The new child el
我正在尝试调用一个新端点来显示数据,我意识到在上一组有效的数据中,它在数据周围用一对额外的“[]”括号进行控制台,我认为这就是问题是,而新端点不会以我使用数据的方式产生它! 这是 NgFor 失败的原
我正在尝试将我的 Symfony2 应用程序部署到我的 Azure Web 应用程序,但遇到了一些麻烦。 推送到远程时,我在终端中收到以下消息 remote: Updating branch 'mas
Minikube已启动并正在运行,没有任何错误,但是我无法 curl IP。我在这里遵循:https://docs.traefik.io/user-guide/kubernetes/,似乎没有提到关闭
每当我尝试docker组成任何项目时,都会出现以下错误。 我尝试过有和没有sudo 我在这台机器上只有这个问题。我可以在Mac和Amazon WorkSpace上运行相同的容器。 (myslabs)
我正在尝试 pip install stanza 并收到此消息: ERROR: No matching distribution found for torch>=1.3.0 (from stanza
DNS 解析看起来不错,但我无法 ping 我的服务。可能是什么原因? 来自集群中的另一个 Pod: $ ping backend PING backend.default.svc.cluster.l
我正在使用Hibernate 4 + Spring MVC 4当我开始 Apache Tomcat Server 8我收到此错误: Error creating bean with name 'wel
我是一名优秀的程序员,十分优秀!