我需要一些关于函数指针和模板之间奇怪混合的帮助......
我的目标:
你有一个班级: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;
}
感谢您的帮助。
亚历山大
答案 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)()
。