VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

有编程疑问吗?还请到提问专区发帖提问!
搜索
查看: 170|回复: 4

[求助] 关于结构体作为函数参数

[复制链接]
35_avatar_middle
在线会员 Jeff_ 发表于 2018-11-21 17:03:17 | 显示全部楼层 |阅读模式
5驿站币
本帖最后由 Jeff_ 于 2018-11-21 18:07 编辑

偶然的机会看到个代码,我自己分析下,请站长和各位大哥帮忙看下,我分析的哪有问题。

  1. #include<iostream>
  2. using namespace std;

  3. template<typename T>
  4. struct double_d{
  5.       void operator()(T a, T b){cout<<a+b<<endl;}  
  6. };

  7. template<typename S>
  8. void set_1(S visit){
  9.      visit(1,2);                                            <==这里隐式的临时结构对象将调用重载的()?
  10. }

  11. int main(){
  12.     set_1<>( double_d<int> () );  <==这里有点看不懂了,double_d<int> ()  这是创建了个隐式的临时结构对象?
  13.     return 0;
  14. }
复制代码



我的分析 S的类型是double_d<int>, visit是个隐式的临时结构对象?

最佳答案

查看完整内容

set_1( A()); 这个的话就是调用构造函数创建了个临时对象




上一篇:c++应用层实现文件的跟踪与修改
下一篇:无法打开文件“libcmtd.lib”

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

51_avatar_middle
online_admins Syc 发表于 2018-11-21 17:03:18 | 显示全部楼层
Jeff_ 发表于 2018-11-21 18:56
换个形式的写法,类的构造函数作为参数?这个visit就是A的对象?将构造函数传给对象是什么操作?

set_1( A());
这个的话就是调用构造函数创建了个临时对象

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

35_avatar_middle
ico_lz  楼主| Jeff_ 发表于 2018-11-21 18:56:47 | 显示全部楼层
本帖最后由 Jeff_ 于 2018-11-21 18:59 编辑
  1. #include<iostream>
  2. using namespace std;

  3. class A{
  4. public:
  5.         A(){cout<<"构造函数"<<endl;};
  6.      void operator()(int a, int b){cout<<a+b<<endl;}  
  7. };

  8. void set_1(A visit){
  9.      visit(1,2);
  10. }

  11. int main(){
  12.     set_1( A());

  13.     return 0;
  14. }
复制代码


换个形式的写法,类的构造函数作为参数?这个visit就是A的对象?将构造函数传给对象是什么操作?

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

75_avatar_middle
在线会员 coldBro 发表于 2018-11-21 19:40:28 | 显示全部楼层
这个地方 double_d<int> ()
要看成两步:
1.double_d<int> 绑定int 型  因为他的原型是模板类型 使用的时候需要传入具体类型 这里就传入了int
2.后面那个小括号 就是重载的操作符

后面的set_1也是模板函数 类似的分析

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

75_avatar_middle
在线会员 coldBro 发表于 2018-11-21 19:53:58 | 显示全部楼层
coldBro 发表于 2018-11-21 19:40
这个地方 double_d ()
要看成两步:
1.double_d 绑定int 型  因为他的原型是模板类型 使用的时候需要传入 ...

你那两个分析是对的。我这里小括号分析是错的 哈哈。
类型名()就是对象

评分

参与人数 1热心值 +1 收起 理由
35_avatar_small Jeff_ + 1

查看全部评分

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你已经在论坛发帖求助,并且从坛友或者管理的回复中解决了问题,请编辑帖子并把分类改成【已解决】

如何回报帮助你解决问题的坛友?可以给对方加【热心】【驿站币】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2018-12-14 00:55

Powered by Discuz! X3.4

© 2009-2018 cctry.com

快速回复 返回顶部 返回列表