首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 .NET Java 游戏 视频 人才 外包 培训 数据库 书店 程序员
中国软件网
欢迎您:游客 | 登录 注册 帮助
  • C++语言中重载函数的函数指针如何处理? [已结贴,结贴人:MagiSu]
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • MagiSu
    • 等级:
    发表于:2008-05-06 20:24:43 楼主
    现在有函数
    double drand(void); //返回一个在[0..1)之间的double
    double drand(double,double); //返回一个在两个参数之间的double

    然后我要用generate初始化一个数组:
    vector <double> D(100);
    generate(D.begin(),D.end(),****);
    其中****怎么填写呢?
    50  修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 20:25:571楼 得分:10
    generate的原型会指出调用哪个
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 20:32:552楼 得分:0
    貌似说错了,测试结果是直接无法解析...
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 20:38:593楼 得分:0
    C/C++ code
    #include <iostream> #include <vector> #include <algorithm> using namespace std; double gen1(double, double){return 1;} double gen1(double){return 2;} void Genetate(double* _beg, double* _end, double (*op)(double, double)) { for (;_beg!=_end;++_beg) *_beg=op(0,0); } //Genetate是一个普通函数的时候根据原型可以匹配 //Genetate是一个模板的时候无法解析 int main() { vector<double> v(20); Genetate(v.begin(),v.end(),gen1); copy(v.begin(),v.end(),ostream_iterator<double>(cout, "\t")); return 0; }
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 20:45:304楼 得分:0
    ding
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • WingForce
    • 等级:
    发表于:2008-05-06 21:52:325楼 得分:0
    mark
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 21:53:316楼 得分:20
    用static_cast <...>(drand)
    ...留给你自己填。
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 21:59:087楼 得分:10
    C/C++ code
    #include <vector> #include <functional> #include <algorithm> #include <iostream> using namespace std; struct genfun { genfun() : _d1(0.0), _d2(1.0) { } genfun(const double d1, const double d2) : _d1(d1), _d2(d2) { } double operator()() { return _d1 + (static_cast<double>(rand()) / RAND_MAX) * (_d2 - _d1); } private : double _d1; double _d2; }; int main() { vector<double> vd(5); generate(vd.begin(), vd.end(), genfun()); for (size_t i = 0; i < vd.size(); ++i) cout<<vd[i]<<" "; cout<<endl<<endl; generate(vd.begin(), vd.end(), genfun(5.0, 15.3)); for (size_t i = 0; i < vd.size(); ++i) cout<<vd[i]<<" "; cout<<endl<<endl; return 0; } ---------- 0.00125126 0.563585 0.193304 0.808741 0.585009 9.94269 8.608 14.2284 13.4753 12.69
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 22:02:038楼 得分:0
    飞雪兄 用的是神秘编译器? 我在VS2005下发现有问题

    1>d:\我的文档\visual studio 2005\projects\cytest\cytest\cytest.cpp(72) : error C2440: “类型转换”: 无法从
    “std::_Vector_iterator <_Ty,_Alloc>”转换为“double *”
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    发表于:2008-05-06 22:08:179楼 得分:0
    呵换成相应的迭代器类型就是了,我用的VC6...呵,对标准支持不好
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • WingForce
    • 等级:
    发表于:2008-05-06 22:11:0110楼 得分:10
    恩,在taodm的提示下知道了。。。
    generate(D.begin(), D.end(), static_cast < double(*)(void) > (drand));
    修改 删除 举报 引用 回复
    进入用户个人空间
    加为好友
    发送私信
    在线聊天
    • MagiSu
    • 等级:
    发表于:2008-05-07 10:23:0411楼 得分:0
    嗯,感谢taodm。我当时没有意识到drand也是一个指针,可以直接用static_cast或者reinterpret_cast唉处理,所以最后采用了一个比较笨的办法:

    double (*pdrand)(void);
    pdrand=drand;

    generate(...);

    感谢楼上所有朋友的帮助!
    修改 删除 举报 引用 回复

    网站简介广告服务网站地图帮助联系方式诚聘英才English 问题报告
    北京创新乐知广告有限公司 版权所有 京 ICP 证 070598 号
    世纪乐知(北京)网络技术有限公司 提供技术支持
    Copyright © 2000-2008, CSDN.NET, All Rights Reserved