注册 登录
编程论坛 C++教室

求助,指向成员函数的指针

hitcyq 发布于 2015-10-20 23:23, 569 次点击
简单举例
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编辑过]

3 回复
#2
TonyDeng2015-10-21 08:43
看看你的類定義
#3
rjsp2015-10-21 08:57
我看到有人回复你了 http://bbs.
#4
hitcyq2015-10-25 08:35
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();
    }
想再问一个问题,这两个函数有没有办法合并?或者还有没有其他方法可以同时实现成员函数及成员函数的指针的输出。
1