社区
C++ 语言
帖子详情
我已经昏了,关于绑定模板函数的问题
lsaturn
2007-04-04 03:24:08
大家知道boost函数的威力强大,我之前也一直用得很愉快
boost::bind(std::count, _1, _2, _3);
这样的绑定是无法编译通过的,换句话说,就是无法绑定模板函数
是我使用方法没有对,还是确实无法绑定模板函数
我尝试自己写一个对模板函数的bind,好象很棘手,求教
...全文
709
25
打赏
收藏
我已经昏了,关于绑定模板函数的问题
大家知道boost函数的威力强大,我之前也一直用得很愉快 boost::bind(std::count, _1, _2, _3); 这样的绑定是无法编译通过的,换句话说,就是无法绑定模板函数 是我使用方法没有对,还是确实无法绑定模板函数 我尝试自己写一个对模板函数的bind,好象很棘手,求教
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
25 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lsaturn
2007-04-09
打赏
举报
回复
我也研究了,函数模板不能成为模板的模板参数,有的规定还真是感觉不知觉啊
taodm
2007-04-06
打赏
举报
回复
又研究了一下,函数模板不能成为模板的模板参数。
所以,可以放弃了。
taodm
2007-04-06
打赏
举报
回复
本想抄boost::bind写一个的,但boost::bind实在太复杂了,就算了。
lsaturn
2007-04-05
打赏
举报
回复
template<class T>
void fuck()
{
}
template<class T>
void bind(void (*)<T>())
{
}
bind(fuck<int>);
上面这样写测试无法通过,应该怎么写啊?
lsaturn
2007-04-05
打赏
举报
回复
qingcairousi(青耕),你说的没有错,我还有更简单的实现方式,但是我希望只有一个DispatchOneTimer函数,不出现多余的小类,个人审美的偏好
taodm的帖子我看过,实际上由于__LINE__的使用,导致不完美,我尝试写一个实现来再讨论
thinkinnight
2007-04-05
打赏
举报
回复
看看,一直觉得模板有些地方难用,不知什么时候就会有一个无法或者很难搞定的东西出现。学习ing
taodm
2007-04-05
打赏
举报
回复
要自己在编译期生成一个静态的func可以参考这个帖子 http://community.csdn.net/Expert/TopicView.asp?id=5422512
让你自己的bind使用模板的模板参数即可。
EddySoft
2007-04-05
打赏
举报
回复
学习...
taodm
2007-04-05
打赏
举报
回复
template<class T>
void bind(T)
{
}
pass86
2007-04-05
打赏
举报
回复
UPJF
qingcairousi
2007-04-04
打赏
举报
回复
编译多态?
struct base
{
virtual void func()=0;
};
template<typename derivedT>
struct TimerBase:base
{
void func()
{
//using deriveT::timeMsel here
}
long m_elapsed; // 自上一次触发以来经过的实际毫秒数, 和要求的 TimeMsel 可能并不相同
long m_total; // 启动以来的总时间
};
template <timeMsgEnum TimeMsel>
struct Timer_Msg:TimerBase<Timer_Msg<TimeMsel> >//有些时候没用编译多态了,记不清声明是不是这样的了,见谅:)
{
static const int timeMsel=TimeMsel;
};
void DispatchOneTimer(base&, long totalMsel)
{
}
其实就是把DispatchOneTimer里面需要根据类型的不同来作的事情放到TimerBase::func()里面,然后用虚函数做成运行时接口。这样就可以用bind绑定DispatchOneTimer了。
lsaturn
2007-04-04
打赏
举报
回复
编译和运行之间真是有一个巨大的鸿沟啊
lsaturn
2007-04-04
打赏
举报
回复
那我想写一个自己的bind来解决这个问题,这个问题是如何在编译期生成一个静态的func,晕,看来这个问题郁闷了
taodm
2007-04-04
打赏
举报
回复
查了下for_each,必须要functor有一个template的operator()。
你的DispatchOneTimer必须改掉了,bind帮不了你
lsaturn
2007-04-04
打赏
举报
回复
那有办法解决我上面代码里面的问题吗?
我有的解决办法就是生成小类,可是这样就麻烦了
taodm
2007-04-04
打赏
举报
回复
bind不可能绑定模板,它必须绑定类型。
lsaturn
2007-04-04
打赏
举报
回复
typedef enum
{
Time_50ms = 50
, Time_100ms = 100
, Time_200ms = 200
, Time_500ms = 500
, Time_1s = 1000
, Time_2s = 2000
, Time_5s = 5000
, Time_10s = 10000
, Time_30s = 30000
, Time_1m = 60000
, Time_2m = 120000
, Time_5m = 300000
}timeMsgEnum;
template <timeMsgEnum TimeMsel>
struct Timer_Msg
{
long m_elapsed; // 自上一次触发以来经过的实际毫秒数, 和要求的 TimeMsel 可能并不相同
long m_total; // 启动以来的总时间
};
typedef boost::mpl::vector<
Timer_Msg<Time_50ms >
, Timer_Msg<Time_100ms>
, Timer_Msg<Time_200ms>
, Timer_Msg<Time_500ms>
, Timer_Msg<Time_1s >
, Timer_Msg<Time_2s >
, Timer_Msg<Time_5s >
, Timer_Msg<Time_10s >
, Timer_Msg<Time_30s >
, Timer_Msg<Time_1m >
, Timer_Msg<Time_2m >
, Timer_Msg<Time_5m >
> time_list_t;
template <timeMsgEnum MsgEnum>
void DispatchOneTimer(Timer_Msg<MsgEnum>, long totalMsel)
{
}
boost::mpl::for_each<time_list_t>(boost::bind(DispatchOneTimer, _1, 123));//此处无法编译通过
taodm
2007-04-04
打赏
举报
回复
你在说什么呀,贴全你的代码。
lsaturn
2007-04-04
打赏
举报
回复
我要是用mpl的for_each,传过来的是类型,而不是值啊
珍惜生命远离CPP
2007-04-04
打赏
举报
回复
不用啊用taodm的方法
模板函数写上参数的话就可以bind的
加载更多回复(5)
easyexcel根据
模板
写入_利用字典及查找替换,将Excel信息与Word
模板
组合
大家好,我们今日讲解“VBA信息获取与处理”教程中第十五个专题“将Excel数据信息传递给WORD应用”的第四节“利用字典及查找替换,将Excel信息与Word
模板
组合”,这个专题是非常实用的知识点,希望大家能掌握利用。...
前端面试题(Vue)
MVVMModel(模型)模型是指代表真实状态内容的领域模型(面向对象),或指代表内容的数据访问层(以数据为中心)。View(视图)就像在MVC和MVP模式中一样...在视图模型中,
绑定
器在视图和数据
绑定
器之间进行通信。优点:
May 18:PHP
函数
函数
说明 abs 绝对值acos 反余弦acosh 反双曲余弦addcslashes 以 C 语言风格使用反斜线转义字符串中的字符addslashes 使用反斜线引用字符串apache_child_terminate 在本次请求结束后终止 apache 子进程apache_...
express源码解析
express是nodejs平台上一个非常流行的框架,4.2.0是最新的版本,相比3.x版本优化了代码和api,去除了connect模块,自己实现了一个router组件,实现http请求的顺序流程处理,去除了很多
绑定
的中间件,使代码更清晰。...
C++提高进阶,你知道多少?
曾经有些人问我
问题
,问得都是一些很基础的
问题
,但这些人却
已经
能使用VC编一个对话框界面来进行必要的操作或者是文档/视界面来实时接收端口数据并动态显示曲线(还使用了多线程技术),却连那些基础的
问题
都不清楚...
C++ 语言
65,186
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章