簡體   English   中英

使用mem_fun()作為智能指針的容器

[英]using mem_fun() for container of smart pointers

我最近決定將指針向量更改為智能指針向量,但盡管這些智能指針與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 <>基本上具有相同的接口,但我不能在我的項目中使用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中的整個向量(並且你的valid()也應該是const)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM