标题:求助,指向成员函数的指针
只看楼主
hitcyq
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-10-20
结帖率:0
已结贴  问题点数:10 回复次数:3 
求助,指向成员函数的指针
简单举例
1、有一个class Point,Point有成员函数get_x()、get_y()、get_z()、get_velocity()、get_color()...等;
2、有多个vector A、B、C...等, A、B、C等的size()不一定一样;
3、需要向文件中输出vector A、B、C等的成员函数的值,形式为抬头(参数名称、单位)+数值,如
“X坐标    mm    2.3    4.6    4.3    ...”。
有一种繁琐的解决方法,对每个成员函数编写一个for循环,示例如下
程序代码:
ostringstream output_file<<"X坐标\tmm";
for(size_t i=0;i<A.size();++i){
output_file<<"\t"<<A[i].get_x();
}
output_file<<endl;

遇到的问题是,Point下有几十个成员函数,如果每一个都写这样一段话,代码数量很长,也不好维护,因此想找一总简洁的输出方法,例如有这样一个函数
ostringstream output(vecotr<Point> A,string head,func(get_x));

其中head为抬头,func函数实现输出A.get_x(),用上述一行代码实现之前多行代码的功能,需要输出B的y坐标时也只需写下面的一行代码
ostringstream output(vecotr<Point> B,string head,func(get_y));

请教各位大拿,这个func()函数如何实现?

[此贴子已经被作者于2015-10-26 20:31编辑过]

2015-10-20 23:23
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
得分:5 
看看你的類定義

授人以渔,不授人以鱼。
2015-10-21 08:43
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:5 
我看到有人回复你了 http://bbs.
2015-10-21 08:57
hitcyq
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-10-20
得分:0 
chinaunix bruceteen用指向成员函数的指针给出了一个解决方案(如下),试了一下可行。
程序代码:
    bool foo( const Con& con, const Mfun& mfun, std::ostream& os, const char* title )
    {
        os << title;
        for( typename Con::const_iterator itor=con.begin(); itor!=con.end(); ++itor )
            os << '\t' << ((*itor).*mfun)();
        os << '\n';
        return !os.fail();
    }
这个方案对成员函数是可行的,但如果想通过指向成员函数的指针获得成员,我能想到的是用函数重载:
程序代码:
    bool foo( const Con& con, const Mfun& mfun, std::ostream& os, const char* title )
    {
        os << title;
        for( typename Con::const_iterator itor=con.begin(); itor!=con.end(); ++itor )
            os << '\t' << ((*itor)->*mfun)(); //((*itor).*mfun)()改为((*itor)->*mfun)()
        os << '\n';
        return !os.fail();
    }
想再问一个问题,这两个函数有没有办法合并?或者还有没有其他方法可以同时实现成员函数及成员函数的指针的输出。
2015-10-25 08:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-458377-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.181416 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved