0

頻繁な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)が間違っているという些細な問題があります。それを正しく行う方法は?

4

1 に答える 1

6

MAXSW.fooC_Pは、呼び出す必要のあるメンバー関数へのポインタであり、呼び出すMAXSWオブジェクトです。したがって、次のコマンドでその関数を呼び出すことができます。

(MAXSW.*(MAXSW.fooC_P))(ky,MAX);
于 2012-05-19T08:32:01.407 に答える