C++利用不完全实例化来获得函数模板参数的返回值和参数

本文介绍了如何使用C++的不完全实例化来获取以函数为模板参数的返回值和参数类型。通过示例展示了如何定义主模板和不同参数数量的实现,从而在编译期间得到所需信息,例如`Function::arty`、`Function::result_type`等。

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

有一些模板会以函数为模板参数,有时候这些模板要获得函数的返回值和参数。如在boost中的signal和slot机制,就存在这样情况。

那么,我们如何得到这些信息呢?

我们使用C++不完全实例化来实现。


比如,有这个代码

typedef function_traits<void (int,const char*)> Signal;
能够得到Signal::result_type == void, Signal::arg1_type == int, Signal::arg2_type == const char*?


要想获得这种效果,必须通过Function的指针来实现,我们借助一个function_traits_help模板来实现。

template<typename Function>
struct function_traits : public function_traits_help<Function*>
{
};

function_traits_help类接受Function的指针为参数。

函数类型和函数指针是不一样的,如

void (int,int)//定义一个函数类型
void (*)(int, int) //定义了一个函数指针

template<typename Func>
struct FuncType {
   typedef FuncPtr funcPtr;
};
FuncType<void(int,int)>::funcPtr 等同于 void(*)(int,int)


function_traits_help就是利用不完全实例化来实现

首先,定义主模板

</

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值