2010-07-23 3 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 :: list из boost::any?

ответ

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, чтобы возвращать t && (* t == to_test); ' –

Смежные вопросы