定义指向模板函数的函数指针类型

screwzm 2012-04-18 12:44:54



template <typename PktType>
typedef int (* CallbackFunPtrType) (const PktType& CurPkt);//1,提示编译错误

template <typename PktType>
int (* CallbackFunPtr1) (const PktType& CurPkt);//2,提示编译错误



现在需要定义一个指向模板函数的函数指针类型,查了相关资料得知现在c++好像不支持这个特性。

vs2008发现,不但不能用typedef定义指向模板函数的函数指针类型,1处所示;连定义一个指向模板函数的函数指针都不可以,2处所示。
有没有其他巧妙的方法可以实现?求赐教!

...全文
1136 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
Jim_King_2000 2012-04-19
  • 打赏
  • 举报
回复
支持C++11的话,用std::function。不支持的话,用boost::function。
screwzm 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 3 楼 的回复:

一个简单的原因就是,模板在实例化之前就不存在,所以你这个所谓的模板函数的指针在类型未确定之前根本就没意义。


negetive ,
模板是一个实体(entity),模板可以作为模板参数.

但是指针指向的是一个对象或函数,故不能指向模板.
[/Quote]
学习。。。+10086
screwzm 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

template <typename PktType>
struct Wrapper
{
typedef int (* CallbackFunPtrType) (const PktType& CurPkt);
};
这样不就行了
用的时候就
Wrapper<int>::CallbackFunPtrType callback=....
[/Quote]
这个方法之前也用过了,但是用的时候跟你这有点区别!
下次再按照你的方法试试!
谢了
screwzm 2012-04-19
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

我只是想说,,模板在实例化之前是存在的..

只不过不是类型.所以 typedef 不行.指针不行..
[/Quote]谢谢
iamnobody 2012-04-18
  • 打赏
  • 举报
回复
我只是想说,,模板在实例化之前是存在的..

只不过不是类型.所以 typedef 不行.指针不行..
pengzhixi 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 mingliang1212 的回复:]
引用 3 楼 的回复:

一个简单的原因就是,模板在实例化之前就不存在,所以你这个所谓的模板函数的指针在类型未确定之前根本就没意义。

negetive ,
模板是一个实体(entity),模板可以作为模板参数.

但是指针指向的是一个对象或函数,故不能指向模板.
[/Quote]
你还是没理解我的意思,模板可以作为参数这点没错,但是这里不同。LZ的两种形式 1.typedef是想定义一个类型别名,很明显这个指针的类型根本不确定 2.声明一个指针,同样这个指针的类型也不确定。当然编译无法通过。而你所说的作为参数 我们在使用的时候在传递参数的时候不会出现类型不确定这回事。
iamnobody 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

一个简单的原因就是,模板在实例化之前就不存在,所以你这个所谓的模板函数的指针在类型未确定之前根本就没意义。
[/Quote]

negetive ,
模板是一个实体(entity),模板可以作为模板参数.

但是指针指向的是一个对象或函数,故不能指向模板.
rendao0563 2012-04-18
  • 打赏
  • 举报
回复
可以的. 只是不是这么写的.
帅得不敢出门 2012-04-18
  • 打赏
  • 举报
回复
3楼一针见血
pengzhixi 2012-04-18
  • 打赏
  • 举报
回复
一个简单的原因就是,模板在实例化之前就不存在,所以你这个所谓的模板函数的指针在类型未确定之前根本就没意义。
RabbitLBJ 2012-04-18
  • 打赏
  • 举报
回复
如果LZ是需要一个指向函数模板的指针的话,建议参考STL中仿函数的实现

你可以用你现在需要被指向的函数当做一个参数传给仿函数的构造器,然后重载()运算符即可
serenesunny 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

template <typename PktType>
struct Wrapper
{
typedef int (* CallbackFunPtrType) (const PktType& CurPkt);
};
这样不就行了
用的时候就
Wrapper<int>::CallbackFunPtrType callback=....
[/Quote]

这个,看不懂
Fn_1088 2012-04-18
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
template <typename PktType>
struct Wrapper
{
typedef int (* CallbackFunPtrType) (const PktType& CurPkt);
};
这样不就行了
用的时候就
Wrapper<int>::CallbackFunPtrType callback=....
[/Quote]
这个牛,学习了。
SammyLan 2012-04-18
  • 打赏
  • 举报
回复
template <typename PktType>
struct Wrapper
{
typedef int (* CallbackFunPtrType) (const PktType& CurPkt);
};
这样不就行了
用的时候就
Wrapper<int>::CallbackFunPtrType callback=....
ri_aje 2012-04-18
  • 打赏
  • 举报
回复
c++11 14/1 says
A template defines a family of classes or functions or an alias for a family of types.
因此,不存在 function pointer template.
另外,你的概念似乎有些混淆。c++ 标准中不存在模板函数的概念,因此也不存在"模板函数的函数指针"。c++ 中只有函数模板,注意函数模板是一个模板,不是函数,因此也不存在指向它的指针。
你还是说说到底要干嘛吧,说不定不用这么麻烦呢。
内容概要:本文系统研究了谐振式双有源桥(DAB)变换器的无传感模型预测控制(MPC)方法,旨在通过Simulink仿真平台实现无需电流传感器的高性能控制策略,从而提升系统可靠性并降低硬件成本。研究深入分析了串联谐振型DAB变换器的工作原理与数学建模过程,构建了完整的无电流传感MPC控制框架,重点解决了系统状态观测、预测模型构建、控制律设计及稳定性保障等关键问题。文中详细阐述了状态观测器的设计原理,实现了对关键电流状态的精确估计,并结合模型预测控制算法优化动态响应性能,有效应对功率波动与负载变化。通过对闭环系统的仿真验证,充分展示了该方法在动态性能、鲁棒性与控制精度方面的优越表现,为电力电子系统中先进控制策略的应用提供了可复现的技术路径。; 适合人群:具备电力电子技术、自动控制理论及Simulink仿真基础,从事新能源发电、储能系统、电动汽车、直流微网等领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①研究无电流传感器条件下高动态性能DAB变换器的控制方案设计;②掌握模型预测控制与状态观测器在电力变换系统中的集成方法;③通过Simulink仿真复现先进控制策略,支撑高水平科研论文撰写、课题申报或实际工程项目开发。; 阅读建议:建议结合所提供的Simulink仿真模型进行动手实践,重点关注状态观测器与MPC控制器的参数设计与耦合关系,对照文中“完美复现”案例逐步调试,深入理解控制算法的实现细节与性能优化方法,以全面提升理论分析与工程应用能力。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧