2
爲什麼當我使用模板函數謂詞時這不起作用。Remove_if列表的謂詞
class A
{
int x;
public:
A(int X):x(X){}
int getX() const {return x;}
};
template <typename T>
bool less_than_two(T const &a)
{
return (a.getX()<2);
}
int main()
{
list <A> l;
for (int i = 0; i < 5; i++)
l.push_back(i);
l.remove_if(less_than_two);
}
'less_than_two'是一個函數模板,而不是一個函數。實例化它以獲得一個函數,就像納文說的那樣。 – GManNickG 2010-07-28 08:26:49
請注意,當你使用一個函數對象'struct less_than_two {template bool operator()(const T&a){return a.getX()<2;}};這樣做會變得更容易。可能會對函數對象的成員函數進行內聯調用('operator()()'是成員函數),而不是通過函數指針調用。 –
sbi
2010-07-28 08:43:35