STL 容器的重载运算符 ==

发布于 2024-09-11 09:56:02 字数 340 浏览 15 评论 0原文

我正在尝试从 list中删除一个类对象l

l.remove(class_type);

我尝试编写这样的内容作为成员函数,

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

您如何编写一个重载函数来从 boost::any 的 std::list 中删除类的对象?

I'm trying to remove a class object from list<boost::any> l

l.remove(class_type);

I tried writing something like this as a member function

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

How would you write an overload function to remove an object of class from a std::list of boost::any?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

不知所踪 2024-09-18 09:56:02

虽然 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));

While your signature for operator== looks fine, overloading it for class_type isn't enough as boost::any doesn't magically use it. For removing elements however you can pass a predicate to remove_if, e.g.:

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));
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文