C++模版全特化、偏特化[]返回函数指针、参数(模版返回多态设计)

本文深入探讨了C++模板元编程的高级应用,通过具体实例展示了如何利用模板特性进行参数类型解析,包括函数指针、成员函数和不同类型的参数。通过一系列的`GetParam1Type`模板结构,精确地获取函数的第一个参数类型,为复杂的数据类型处理提供了灵活的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

全特化、偏特化分析:https://blog.youkuaiyun.com/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;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值