gpt4 book ai didi

c++ - C++ 如何实现 std::is_class

转载 作者:太空宇宙 更新时间:2023-11-04 13:21:30 24 4
gpt4 key购买 nike

这里是 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 可以与任何类型的参数一起使用,但实际上不会被实现。这是可行的,因为该函数仅在编译时使用,不会发生实际调用。由于它已过载,编译器将根据使用的类型执行不同的操作。

关于c++ - C++ 如何实现 std::is_class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35099149/

24 4 0
文章推荐: c++ - 将焦点设置到第一个小部件
文章推荐: c++ - 应该允许 std::unique_ptr
文章推荐: c++ - 在 C++11 中创建 N 元素 constexpr 数组
文章推荐: javascript - 在 ImageFlow Slider 中使用
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com