gpt4 book ai didi

c++ - 使用 mem_fun() 作为智能指针的容器

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:39:04 27 4
gpt4 key购买 nike

我最近决定将指针 vector 更改为智能指针 vector ,但尽管这些智能指针与 STL 兼容,但我无法转换某些算法来使用它们。

考虑一个

class Base
{
...
virtual bool valid();
};

你如何转换

bool is_any_valid( vector< Base* > v )
{
return v.end() !=
find_if( v.begin(), v.end(), mem_fun( &Base::valid ) );
}

进入这个?

bool is_any_valid( vector< my_smart_ptr< Base > v )
{
// mem_fun() fails, because valid() is not a member of my_smart_ptr< Base > !!!
// return v.end() !=
// find_if( v.begin(), v.end(), mem_fun( &Base::valid ) );
}

您可以假设 my_smart_pointer<> 与 shared_ptr<> 具有本质上相同的接口(interface),但我不能在我的项目中使用 boost。

有没有我可以编写的(通用)适配器来允许 mem_fun 或 mem_fun_ref 工作?我最好寻找在线解决方案,例如:

 find_if( v.begin(), v.end(), mem_fun( some_adapter( &Base::valid ) ) );

因为有很多类似的行出现。

最佳答案

您想使用 boost mem_fn,因为它完全符合您的要求。查看此链接,特别是 PURPOSE 部分。

http://www.boost.org/doc/libs/1_45_0/libs/bind/mem_fn.html

顺便说一句,您应该传递对 const 的引用,而不是 is_any_valid 中的整个 vector (并且您的 valid() 也应该是 const)。

关于c++ - 使用 mem_fun() 作为智能指针的容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4245954/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com