2010-07-23 80 views
0

我試圖從list<boost::any> l超載==操作符的STL容器

l.remove(class_type); 

刪除類對象我試着寫這樣的事情作爲一個成員函數

bool operator == (const class_type &a) const //not sure about the arguments 
{ 
    //return bool value 
} 

你會如何寫重載函數從的std ::列表中刪除類的對象?

回答

2

雖然你的operator==的簽名看起來不錯,但將其重載爲class_type還不夠,因爲boost::any不會神奇地使用它。但是,您可以將謂詞傳遞給remove_if,例如:

template<class T> 
bool test_any(const boost::any& a, const T& to_test) { 
    const T* t = boost::any_cast<T>(&a); 
    return t && (*t == to_test); 
} 

std::list<boost::any> l = ...; 
class_type to_test = ...; 
l.remove_if(boost::bind(&test_any<class_type>, _1, to_test)); 
+0

好主意。也就是說,我會將第2行和第3行縮減爲'return t &&(* t == to_test);' – 2010-07-23 06:12:27