SFINAE

作者: hygge_254d | 来源:发表于2018-10-11 17:23 被阅读0次

    #include <stdio.h>

    template <class T>

    struct is_pointer

    {

    template <class U>

    static char is_ptr(U *);

    template <class M, class C>

    static char is_ptr(M C::*);

    template <class U>

    static char is_ptr(U(*)());

    template<class ...>

    static double is_ptr(...);

    enum { value = sizeof(is_ptr((T)(0))) == sizeof(char) };

    };

    template<typename T>

    struct has_no_destroy {

    template<typename C>

    static char test(decltype(&C::no_destroy));

    template<typename ...>

    static int test(...);

    const static bool value = (sizeof(test<T>(0)) == 1);

    };

    struct Foo {

    int bar;

    };

    void testTypeCheck() {

    typedef int * IntPtr;

    typedef int Foo::* FooMemberPtr;

    typedef int(*FuncPtr)();

    printf("%d\n", is_pointer<IntPtr>::value);        // prints 1

    printf("%d\n", is_pointer<FooMemberPtr>::value);  // prints 1

    printf("%d\n", is_pointer<FuncPtr>::value);      // prints 1

    printf("%d\n", is_pointer<int>::value);          // prints 0

    }

    int main()

    {

    testTypeCheck();

    getchar();

    }

    相关文章

      网友评论

          本文标题:SFINAE

          本文链接:https://www.haomeiwen.com/subject/dpzbaftx.html