[英]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_instance
的m_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.