Son zamanlarda akıllı göstericilerin bir vektörü içine bir işaretçi vektörünü değiştirme kararını aldım, ancak bu akıllı göstericiler STL uyumlu olsa da, bunları kullanmak için bazı algoritmaları dönüştüremedim .akıllı göstericilerin kapsayıcısı için mem_fun() kullanarak
Bunu nasıl içine
bool is_any_valid(vector< Base* > v)
{
return v.end() !=
find_if(v.begin(), v.end(), mem_fun(&Base::valid));
}
dönüştürebilirim bir
class Base
{
...
virtual bool valid();
};
düşünün?
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));
}
O my_smart_pointer < varsayabiliriz> shared_ptr <>, olarak temelde aynı arayüze sahip ama benim projede destek kullanamaz.
Mem_fun veya mem_fun_ref dosyasının çalışmasına izin vermek için yazabileceğim bir (genel) bağdaştırıcı var mı? bu çizgilerin pek çoğunda benzer durumlar vardır, çünkü
find_if(v.begin(), v.end(), mem_fun(some_adapter(&Base::valid)));
: I, tercihen gibi bir hat-içi eriyik.
'mem_fn' ayrıca MSVC++, http://msdn.microsoft.com/en-us/library/bb982851.aspx –
adresinde mevcuttur, tam olarak neye ihtiyacım var. Sadece (kodu okuduktan sonra) neden bir non-const davası için referansı uyguladıklarını anlayamıyorum! –