2012-09-19 52 views
1

我有以下類:函數指針數組的類型是什麼?

class DXStartupEncoder { 
public: 
    void EncodeA(unsigned char*& message) const; 
    void EncodeB(unsigned char*& message) const; 
    void EncodeC(unsigned char*& message) const; 
    void EncodeD(unsigned char*& message) const; 
}; 

<type> dn_sequence[] = {&DXStartupEncoder::EncodeA, &DXStartupEncoder::EncodeB, &DXStartupEncoder::EncodeC, &DXStartupEncoder::EncodeD }; 

但什麼是這個數組的函數指針的類型?

回答

7

如果您不確定,請使用typedef

typedef void (DXStartupEncoder::*Encoder)(unsigned char*&) const; 
Encoder dn_sequence[] = { .... }; 

在C++ 11可以使用decltype來推斷出值的類型,所以你甚至不需要知道如何編寫一個成員函數指針的類型(auto不能工作,因爲右手邊是一個initializer_list):

decltype(&DXStartupEncoder::EncodeA) dn_sequence[] = { ... }; 

如果你需要避免typedef,順便說一下,你就會把它寫成:

void (DXStartupEncoder::*dn_sequence[])(unsigned char*&) const = { ... }; 
1
  1. 您沒有函數指針。你有指針到成員函數

  2. 你不是要求數組的類型;相反,您要求數組的基礎類型

  3. 基礎類型是:

    void (DXStartupEncoder::*)(unsigned char * &) 
    
  4. 的(不完全的)的陣列型是這樣的:

    void (DXStartupEncoder::*[])(unsigned char * &) 
    
0

您可以聲明數組爲:

void (DXStartupEncoder::*dn_sequence[])(unsigned char *&) const = {...}; 

這是顯而易見的聲明,反映使用;給定的索引i,一個const DXStartupEncoder &參考encunsigned char *&參考c,可編寫:

(enc.*dn_sequence[i])(c) 

得到void類型的值:

 (enc    .* dn_sequence[i])(c    ) 
void (DXStartupEncoder::*dn_sequence[])(unsigned char *&) const