[英]can i use mem_fun like this?
我想在運行時設置函數指針。 但是我被困在這里。 當我使用全局函數或靜態類成員函數時,一切正常。 但是,當函數是普通的類成員函數時。 我總是遇到編譯器錯誤。 這是代碼:
class A
{
int val;
public:
A() { val = 0; }
A(int j) { val = j; }
int aFun(int k) {val -= k; return val; }
};
typedef int (* func)(int );
class B
{
func m_addr;
public:
B(func param)
: m_addr(param)
{
}
void execute()
{
cout << m_addr(9) << endl;
}
};
我正在嘗試像這樣使用它們:
/ *錯誤C2355:“ this”:只能在非靜態成員函數內部引用錯誤C2064:term的結果不等於接受1個參數的函數類未定義'operator()'或用戶定義的轉換運算符帶有適當數量參數的函數指針或函數引用* /
A a;
B b(A::aFun);
b.execute();
大量搜索之后,我發現std::mem_fun
可能會有所幫助。 但我不知道如何使用它。 有人可以幫助我嗎?
PS:我正在使用Visual C ++ 2010
類成員函數通過調用編譯器傳遞給它的一個額外的參數this
,所以編譯器看到aFun
作為開始申報並寫成
int A::aFun(A* this, int k)
{
this->val -= k;
return this->val;
}
靜態/全局函數沒有此參數,因此編譯成功。
為了使用A::aFun
您需要在某處創建類A
的實例。
修改如下:
static int val;
class A
{
public:
A() { val = 0; }
A(int j) { val = j; }
static int aFun(int k) {val -= k; return val; }
};
我沒有確切地知道您要做什么,但我看到一個錯誤,也許可以為您提供幫助。
那是一個指向函數的指針,不是嗎?
typedef int (* func)(int );
但是您沒有函數,卻有一個類的方法。 (成員函數)所以typedef應該是概率:
typedef int (A::*func)(int );
希望對您有所幫助,您可以在google上找到指向成員函數的指針,並且會找到一些示例。
祝好運!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.