指向模板类的函数指针

时间:2014-06-27 13:09:09

标签: c++ templates member-function-pointers

我需要一些关于函数指针和模板之间奇怪混合的帮助......

我的目标:

你有一个班级:template<typename B> class A,并且有一个班级成员。现在我想访问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;
}

感谢您的帮助。

亚历山大

2 个答案:

答案 0 :(得分:1)

首先,修复语法错误:

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

然后,需要在对象上调用成员函数指针。在不知道这些奇怪指针的目的的情况下,我无法猜出你想在这里做什么。也许你想打电话给B_instance

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

或许你想在m_b内的A_instance对象上调用它;但你不能这样做,因为它是私人的。如果是这种情况,你可能只需要常规的成员函数,而不是奇怪的函数指针

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

答案 1 :(得分:0)

这些:

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

应该是:

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

(A_instance.get*)()应为(B_instance.*A_instance.get)()