首页 > 解决方案 > std::is_union 实现如何工作?

问题描述

我目前正在更详细地浏览 C++ 标准库,我想知道它的实现是如何std::is_union工作的。在 libcxx (LLVM) 中,除了直接使用可能内置的__is_union,它被定义为

template <class _Tp> struct __libcpp_union : public false_type {};
template <class _Tp> struct _LIBCPP_TEMPLATE_VIS is_union
    : public __libcpp_union<typename remove_cv<_Tp>::type> {};

同样,STLPort,虽然很老,但实现起来更加简约:

template <class T>
struct is_union
{ };

这似乎总是解决std::false_type,甚至更糟的是,一个空结构,但它没有;这是如何实现的?在另一个问题中,答案表明is_union没有编译器钩子就无法实现,但这是否意味着 libcxx、STLPort 以及可能所有主要实现都不能移植到任何不能自动使其工作的编译器?

标签: c++language-implementation

解决方案


并非所有标准库都可以用 C++ 实现。

您跳过了各种内在函数的测试。

is_union本质上,没有内在函数就无法实现。

std不是C++ 附带的库,它是该语言的一部分。 #include <vector>允许某些代码工作;不需要vector存在标头,只需在指令之后更改 C++ 程序的状态。

在实践中(通过设计),它是在内部函数的帮助下作为相对传统的库在 C++ 中编写和实现的,并使用保留标记编写以避免预处理器冲突(例如,变量名___Ty变量名)。


推荐阅读