【问题标题】:function pointer inside class类内的函数指针
【发布时间】:2012-05-19 08:25:52
【问题描述】:

我需要一个用于不同功能的开关来规避频繁的 if 方向。它应该类似于下面的代码,封装在一个类中:

#include<iostream>
#include<stdlib.h>

using namespace std;

template<class T>
class MaxSwitch
{
public:
typedef T (MaxSwitch::*Max_P)(T,T);
Max_P fooC_P;

MaxSwitch(int Q) {
    if (Q==0)fooC_P=&MaxSwitch::MaxVal1;
    else fooC_P=&MaxSwitch::MaxVal2;
}

inline T MaxVal1(T kx,T MAX)
{
    return kx+1;
}

inline T MaxVal2(T kx,T MAX)
{
    return MAX;
}

};

 int main( int argc, char ** argv )
{
int Q=atoi ( argv[1] );
MaxSwitch<int> MAXSW(Q);


int MAX=5;

for ( int kx=0;kx<MAX;kx++ ) for ( int ky=0;ky<(MAXSW.fooC_P)(kx,MAX);ky++ )
    {
        cout<<"(kx="<<kx<<", ky="<<ky<<endl;
    }

return 0;
 }

我现在有一个小问题,即函数调用 (MAXSW.fooC_P)(ky,MAX) 是错误的。怎么做才合适?

【问题讨论】:

  • 快速说明:您的参数命名约定使代码不那么可读..
  • (Jay D 对“不那么可读”很满意——我会说完全令人困惑。)

标签: c++ function-pointers typedef


【解决方案1】:

MAXSW.fooC_P 是您需要调用的指向成员函数的指针,MAXSW 是您要调用它的对象。所以你可以调用这个函数:

(MAXSW.*(MAXSW.fooC_P))(ky,MAX);

【讨论】:

  • 请注意,(MAXSW.*MAXSW.fooC_P)(ky,MAX) 也可以使用(也就是说 - 内括号是多余的)。
猜你喜欢
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
相关资源
最近更新 更多