致謝 我試圖在特殊對象上使用std :: sort算法。 我有一個列表進行排序和二元函數,給我一個比較:指向成員函數的指針的語法錯誤
B.cpp
void B::FindClosest(vector<A*> list)
{
bool (B::*ptr)(A*,A*) = &B::Closer;
sort(list.begin(),list.end(),(this->*ptr));
// some use of this sorted list
}
bool B::Closer(A* lhs ,A* rhs)
{
if(Distance(this,lhs)<Distance(this,rhs))
{
return true;
}
else
{
return false;
}
}
和bh的有趣的部分:
class B : public A
public:
void FindClosest(vector<A*>);
bool Closer(A*,A*);
這看起來很簡單,但我不知道爲什麼它不工作。 在我看來,我在指向成員函數上做錯了什麼,但不知道是什麼。
以下是錯誤消息:
agglomerate.cpp:32: error: invalid use of non-static member function
我已經嘗試了一些其他的方式來得到的東西的工作,但一無所獲。
我沒有綁定到成員函數的指針,如果你有一個簡單的/不同的方式來做到這一點,歡迎你。
非常感謝,
Azhrilla
嘗試:this-> B :: * ptr – lucasg 2013-04-30 11:12:04
這不起作用,因爲'this - > * ptr'不能完成你認爲它的工作。它不會通過綁定this來創建常規函數指針。這甚至不是合法的語法。 – StoryTeller 2013-04-30 11:19:03
您需要一個函數對象來保存對「B」對象的引用。 – StoryTeller 2013-04-30 11:20:22