簡體   English   中英

指向模板類的函數指針

[英]Function pointer to a template class

對於函數指針和模板之間的奇怪混合,我需要一些幫助...

我的目標:

您有一個類: template<typename B> class A ,並且A實例化了B成員。 現在我要加入B getter / setter。

我嘗試了這個:

class B_example
{
public:
    B_example(int v):m_var(v){}
    int getVar() { return m_var; }
    void setVar(int v) { m_var = v; }

private:
    int m_var;
};


template<typename B> class A
{
public:
    A():m_b(B(5))
    {
        get = &m_b.getVar;
        set = &m_b.setVar;
    }

    int (B::*get)();
    void (B::*set)(int);

private:
    B m_b;
};


int main(int argc, char** argv)
{
    A<B_example> A_instance;
    B_example B_instance(5);


    int a = (A_instance.get*)();

    std::cout << a << std::endl;
}

謝謝你的幫助。

亞歷山大

首先,修復語法錯誤:

get = &B::getVar;
set = &B::setVar;

然后,需要在對象上調用成員函數指針。 在不知道這些奇怪指針的目的的情況下,我無法猜測您要在這里做什么。 也許您想調用B_instance

int a = (B_instance.*A_instance.get)();

或者,也許您想在A_instancem_b對象上調用它; 但您不能這樣做,因為它是私人的。 如果是這樣,您可能只需要常規成員函數,而不是奇怪的函數指針

int get() {return m_b.getVar();}
void set(int v) {m_b.setVar(v);}

這些:

get = &m_b.getVar;
set = &m_b.setVar;

應該:

get = &B::getVar;
set = &B::setVar;

並且(A_instance.get*)()應該是(B_instance.*A_instance.get)()

暫無
暫無

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

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