簡體   English   中英

初始化指向受保護成員函數的指針

[英]initializing pointer to protected member functions

我有這個問題:

在頭文件中:

class D : public B
{
//...
private:
    typedef char* (B::*psbposfun_t)() const;

    static psbposfun_t ms_aposf[2][3];
//...
};

在源文件中:

D::psbposfun_t D::ms_aposf[2][3] = 
{
    {
        &B::fa1,
        &B::fa2,
        &B::fa3
    },
    {
        &B::fb1,
        &B::fb2,
        &B::fb3
    }
};

編譯器抱怨fa1 ... fb3方法受到保護。 實際上,它們在B中受到保護,但是我正在初始化一個屬於D的成員,該成員源自B。

我嘗試在類(D)中初始化ms_aposf,但編譯器抱怨這不是初始化它的地方。

因此,除了在構造函數中實現一次性初始化之外,還會有人知道如何規避此問題嗎?

使用D::代替:

D::psbposfun_t D::ms_aposf[2][3] = 
{
    {
        &D::fa1,
        &D::fa2,
        &D::fa3
    },
    {
        &D::fb1,
        &D::fb2,
        &D::fb3
    }
};

由於D繼承了這些函數,因此可以通過D來訪問它們,但可用作B::指針。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM