什么" T :: *"意思? - 奇怪的范围解析运算符

时间:2017-11-07 12:17:50

标签: c++

我注意到来自cppreference page的这些奇怪的代码。 (运行here)。

我对template <class T> char test(int T::*);感到困惑(第6行)。什么int T::*是什么意思?它是否正确表示类型?

#include <iostream>
//#include <type_traits>

namespace my_impl {
    namespace detail {
        template <class T> char test(int T::*);
        struct two { char c[2]; };
        template <class T> two test(...);
    }

    template <class T>
    struct is_class : std::integral_constant<bool, sizeof(detail::test<T>(0))==1
                                                && !std::is_union<T>::value> {};
}
using my_impl::is_class;

struct A {};

class B {};

enum class C {};

int main() 
{
    std::cout << std::boolalpha;
    std::cout << is_class<A>() << '\n';
    std::cout << is_class<B>() << '\n';
    std::cout << is_class<C>() << '\n';
    std::cout << is_class<int>() << '\n';
}

1 个答案:

答案 0 :(得分:1)

int T::*被称为成员指针,它是指向int的指针,但指向int指针T的成员。如果T是一个类,这只是一个有效的表达式。