c++ 如何实现 std::is_class

How c++ implement std::is_class

本文关键字:std is class 实现 何实现 c++      更新时间:2023-10-16

这是 std::is_class 在 mac 中的实现。我不明白"int _Tp::*"的参数是什么。有人可以解释一下吗?参数的类型是什么,参数的名称是什么?谢谢。

另一个问题是省略号。在 C 中,它至少需要一个省略号之前的参数,但在 C++ 中,它可以只是省略号。我在哪里可以找到有关此部件的标准?

namespace __is_class_imp
{
template <class _Tp> char  __test(int _Tp::*);
template <class _Tp> __two __test(...);
}
template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_class
    : public integral_constant<bool, sizeof(__is_class_imp::__test<_Tp>(0)) == 1 && !is_union<_Tp>::value> {};

为了回答你的一个问题,__test(...)函数接受任意数量的任何类型的参数。但它们不能使用。va_start需要一个前一个参数才能工作,没有它就无法获得任何参数。

这样做的原因是,__test可以与任何类型的参数一起使用,但实际上不会实现。这是有效的,因为该函数仅在编译时使用,不会发生实际调用。由于它是重载的,编译器将根据所使用的类型做不同的事情。