C++模版全特化、偏特化[]返回函數指針、參數(模版返回多態設計)

全特化、偏特化分析:https://blog.csdn.net/lyn_00/article/details/83548629

返回的參數的模版類格式定義:

template <typename ... Parameters>

class CT <void, Parameters> //<...>表示創建該模版類返回的參數類型
{
    //TODO: ...
};

 

#include <iostream>
#include <type_traits>
 
struct A{};
  
template< typename T/*, typename U */>
struct GetParam1Type;
  
template< typename T, typename U, typename V >
struct GetParam1Type< T( U, V ) >
{
    typedef U Result;
};

 
template< typename T, typename U, typename V , typename R>
struct GetParam1Type< T( U, V ,R) >
{
    typedef U Result;
};
  
template< typename T >
struct GetParam1Type< T( void ) >
{
    typedef void Result;
};
  
template< typename T, typename U, typename V >
struct GetParam1Type< T( * )( U, V) >
{
    typedef U Result;
};


 
template< typename T, typename U, typename V , typename R>
struct GetParam1Type< T( * )( U, V ,R) >
{
    typedef U Result;
};
  
template< typename T >
struct GetParam1Type< T( * )( void ) >
{
    typedef void Result;
};
  
template< typename T, typename U, typename V, typename R >
struct GetParam1Type< T ( V::* )( U, R ) >
{
    typedef U Result;
};
 
template< typename T, typename U, typename V, typename R , typename A>
struct GetParam1Type< T ( V::* )( U, R ,A) >
{
    typedef U Result;
};

  
template< typename T, typename V >
struct GetParam1Type< T ( V::* )( void ) >
{
    typedef void Result;
};
  
typedef void ( A::*fun1 )( int, long, double );
typedef void ( A::*fun2 )(  );
typedef long fun3( int, long, double );
typedef long fun4(  );
typedef long ( *fun5 )( int, long, double );
typedef long ( *fun6 )(  );


int main( void )
{
    std::cout << std::is_same< GetParam1Type< fun1 >::Result, int >::value << std::endl;
    std::cout << std::is_same< GetParam1Type< fun2 >::Result, void >::value << std::endl;
    std::cout << std::is_same< GetParam1Type< fun3 >::Result, int >::value << std::endl;
    std::cout << std::is_same< GetParam1Type< fun4 >::Result, void >::value << std::endl;
    std::cout << std::is_same< GetParam1Type< fun5 >::Result, int >::value << std::endl;
    std::cout << std::is_same< GetParam1Type< fun6 >::Result, void >::value << std::endl;
    getchar();
    return 0;
}

 

發佈了337 篇原創文章 · 獲贊 65 · 訪問量 30萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章