J'ai récemment pris la décision de changer un vecteur de pointeurs en un vecteur de pointeurs intelligents, mais bien que ces pointeurs intelligents soient compatibles STL, je n'ai pas pu convertir certains algorithmes pour les utiliser .en utilisant mem_fun() pour conteneur de pointeurs intelligents
Tenir compte un
class Base
{
...
virtual bool valid();
};
Comment convertir
bool is_any_valid(vector< Base* > v)
{
return v.end() !=
find_if(v.begin(), v.end(), mem_fun(&Base::valid));
}
dans tout cela?
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));
}
Vous pouvez supposer que my_smart_pointer <> a essentiellement la même interface que shared_ptr <>, mais je ne peux pas utiliser coup de pouce dans mon projet.
Existe-t-il un adaptateur (générique) que je pourrais écrire pour permettre à mem_fun ou à mem_fun_ref de fonctionner? je regarde de préférence pour une solution, comme en ligne:
find_if(v.begin(), v.end(), mem_fun(some_adapter(&Base::valid)));
parce qu'il ya beaucoup de cas similaires de ces lignes.
'mem_fn' est également disponible dans MSVC++, http://msdn.microsoft.com/en-us/library/bb982851.aspx –
oui, exactement ce dont j'ai besoin. Seulement (après avoir lu le code) je n'arrive pas à comprendre pourquoi ils n'ont pas implémenté la référence à un cas non-const! –