社区
C++ 语言
帖子详情
请问下面的四个函数能否用一个模板来表达...谢谢了...
cwptea
2008-01-18 03:30:03
Layout();
Layout(int orientation);
Layout(int hgap, int vgap);
Layout(int orientation, int hgap, int vgap);
...全文
385
33
打赏
收藏
请问下面的四个函数能否用一个模板来表达...谢谢了...
Layout(); Layout(int orientation); Layout(int hgap, int vgap); Layout(int orientation, int hgap, int vgap);
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
33 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
cwptea
2008-01-21
打赏
举报
回复
fish6344 了不起...
感谢大家...受教了...我实际中也使用的重载函数...
晚上结贴...
cwptea
2008-01-21
打赏
举报
回复
恩...呵呵...是在练习模板...这种传函数的模板...我没见过...
好...我得空仔细研究一下...
Oversense
2008-01-21
打赏
举报
回复
你不是要模板练习哈...
这几个
都是传的函数作为模板参数
cwptea
2008-01-21
打赏
举报
回复
楼上的东西很古怪...我没看明白...能否给点解释出来...谢谢...
Oversense
2008-01-21
打赏
举报
回复
其实是可以的
template <typename F>
void runLayout(F f){
f();
}
template <>
void runLayout(void f()){
}
template <typename A>
void runLayout(void f(A)){
}
template <typename A, typename B>
void runLayout(void f(A, B)){
}
template <typename A, typename B>
void runLayout(void f(A, B, int)){
printf("int");
}
azraelzinsser
2008-01-20
打赏
举报
回复
貌似不可以,重载貌似也不行吧.3不相关吧...
crazybluehunter
2008-01-20
打赏
举报
回复
支持,这种情况重载吧!
Eddy_0825
2008-01-20
打赏
举报
回复
用重载吧。
fish6344
2008-01-19
打赏
举报
回复
不好意思,语“因为C++并不支持函数的部份特化...”更正为:"因为C++并不支持函数模板的部份特化"!
fish6344
2008-01-19
打赏
举报
回复
如果Layout函数内部根本是在做不同的事,我建议你使用重载,例如:
void Layout(){ cout << "嘿!" << endl;};
int Layout(int orientation){ return ++orientaton; };
int Layout(int hgap, int vgap){ return hgap + vgap;};
int Layout(int orientation, int hgap, int vgap)
{
return orientaton + hgap * vgap;
};
//4个同名函数做4种不同的事,纯演示...
上述一个函数名(可以认同为一个方法接口),多种实现,这正是重载的好处 --编译时多态!
如果你想对可能的类型使用泛型处理(慨言之就是类似的一种处理),例如:
//参数sta代表VC中的Windows窗体上的标签控件:
void Layout(long top,long left,CStatic sta)
{
/*move()函数纯属杜撰,一种在窗体上移动控件的方法,此处仅供说明*/
move(top,left,static);
}
//参数ed代表VC中的Windows窗体上的文本编辑框控件:
void Layout(long top,long left,CEdit ed)
{
move(top,left,ed);
}
如上述Layout函数可以使用模板,例如:
//参数Type代表VC中的Windows窗体上的任意控件:
template<typename Type>
void Layout(Type _cols,long top,long left)
{
//必要的_cols类型约束处理....
move(top,left,_cols);//不同控件的一致性处理(泛化处理)
}
对于楼主朋友提到的4个Layout函数由于具有不同的函数签名(参数类型和参数个数),所以,及使你对Layout函数预期是上述的第二种,那么你使用模板作泛型处理,仍然不能廻避Layout需要重载的问题,因为C++并不支持函数的部份特化,所以上述4个不同签名Layout函数还是要写成4个模板,而实现模板函数的重载!
zhang_db
2008-01-18
打赏
举报
回复
template<int argNumber>Layout(int,int,int,int)
这个好玩吗?
needallcodes
2008-01-18
打赏
举报
回复
就算模版了用起来会有什么不同吗?多了个尖尖的<>
扎的慌...
longjing_g
2008-01-18
打赏
举报
回复
Layout(int orientation, int hgap, int vgap);
加默认的参数不就行了,需要模板?!
Cyrosly
2008-01-18
打赏
举报
回复
可以,但似乎没有必要
0黄瓜0
2008-01-18
打赏
举报
回复
用不用模板,关键还看你的函数体.如果函数体各不相同,那肯定不要用模板.就算函数体差别很小,也推荐用参数带默认值.
HelloDan
2008-01-18
打赏
举报
回复
个人认为不行,这个情况应该用重载了。
我啃
2008-01-18
打赏
举报
回复
模板:参数化类型,不是说的很清楚了吗?
cwptea
2008-01-18
打赏
举报
回复
...呵呵...今天偏激了...
...可能答复方式不同是个人风格问题...
其实...我主要的问题是想引出什么时候使用模板比较值得...什么时候用不值得...
ryfdizuo
2008-01-18
打赏
举报
回复
^_^
taodm大哥是个爽快人,喜欢直接了当的,
这个问题模板是可以的,模板里面参数也可以提供默认值,不过模板是处理类型的啊,有必要吗?
cwptea
2008-01-18
打赏
举报
回复
呵呵...真头疼...刚看了你在一个朋友<关于模板的问题>上的回答...
原来是从来都不给明确答案的...
呵呵...我本想在上面说说你的...但想算了...毕竟人家还在讨论问题...
咱俩斗嘴这里已经不是有兴趣讨论问题的地方了...我不想在让他那也这样...
好了...不跟你说了...我自己琢磨琢磨...
加载更多回复(13)
hapi-fhir-server-5.5.3-javadoc.jar
hapi-fhir-server-5.5.3-javadoc.jar
rum-0.21.5-beta.jar
rum-0.21.5-beta.jar
migrationhub-jvm-1.3.100.jar
migrationhub-jvm-1.3.100.jar
location-jvm-0.26.1-beta-javadoc.jar
location-jvm-0.26.1-beta-javadoc.jar
sagemakera2iruntime-jvm-1.3.54-javadoc.jar
sagemakera2iruntime-jvm-1.3.54-javadoc.jar
C++ 语言
65,202
社区成员
250,518
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章