C++函数指针

问题描述:

这可能吗?如果是这样,我似乎无法得到正确的语法。 (C++函数指针)C++函数指针

位的背景。下面的代码缩短了这篇文章。这种实现的原因是为了避免无数的SWITCH/CASE或IF/ELSEIF语句;并有一个DECODER_FUNCTION_TABLE的无尽列表(见下文)。此代码涉及使用助记符表示不同事物的行业标准,并且有数百种这些助记符。因此,我的代码的这一部分是解码某些助记符从另一部分代码传递给它,它通过传入记录进行循环......无论如何,我的难处在于将成员函数指针保存在类之外的结构中...

看一看。我认为该代码可以做一个更好的工作,解释;)

typedef struct _DECODER_FUNCTION_RECS 
{ 
    ISO_MNEMONIC_ID Mnemonic; 
    void (Database::*pFn)(Database::Rec *); 

}DECODER_FUNCTION_RECS; 


DECODER_FUNCTION_RECS DECODER_FUNCTION_TABLE[] = { 

    SFP, &Database::Decode_SFP, 
    KOG, &Database::Decode_KOG 
}; 


void Database::DecodedDescription(Rec *A) 
{ 

    int i = 0; 
    bool Found = false; 

    while(i < DECODER_FUNCTION_TABLE_COUNT && !Found) 
    { 
    if(DECODER_FUNCTION_TABLE[i].Mnemonic == A->Mnemonic) 
     Found = true; 
    else 
     i++; 
    } 

    if(Found) 
    (([DECODER_FUNCTION_TABLE[i]).*this.*pFn)(A); 

} 


void Database::Decode_SFP(Rec *A) 
{ 
    // do decode stuff on A 
} 

我试图制定出细节是这一行:

(([DECODER_FUNCTION_TABLE[i]).*this.*pFn)(A); 
+0

退房这个答案:http://stackoverflow.com/questions/1915880/boostbind-boostfunction-pointers-to-overloaded-or-templated-member-function/1917145#1917145 – Paul 2011-04-21 11:57:16

你调用一个成员函数指针(那是什么这就是所谓的)与

(this->*DECODER_FUNCTION_TABLE[i].pFn)(A); 

能帮括号周围DECODER_FUNCTION_TABLE[i].pFn,但成员访问运算.具有更高的优先级比成员职能运营商->*

+0

哇!快速回答! &绝对正确!非常感谢。也谢谢你的解释......我搞砸了具有比函数操作符更高优先级的成员访问操作符。 – Eric 2011-04-21 12:16:02

+0

@Eric:快?那,那是你问了8分钟后。 :)我很难过,没有人回答。 ;) – Xeo 2011-04-21 12:34:11

我写了几个简单的例子,这将提供一些线索那天

它在我回答这个问题

error C2664 and C2597 in OpenGL and DevIL in C++

或直接link to codepad

+0

谢谢!你的文章也有助于我的理解。 – Eric 2011-04-21 12:18:00