تركيب المسند عند تقسيم متجه من المؤشرات (C ++)

StackOverflow https://stackoverflow.com/questions/1633651

  •  06-07-2019
  •  | 
  •  

سؤال

ولدي متجه مؤشرات إلى الكائنات. كنت ترغب في إزالة الكائنات من هذه النواقل وفقا لسمة هذا ما أفاد به دالة عضو.

وأنا أحاول أن يتبع مثال لطيفة وجدت على كيفية حذف بعض المؤشرات (والأشياء المرتبطة بها) من النواقل. والفكرة الأساسية هي لتقسيم ناقلات، حذف الكائنات المختار، ثم قم بحذف مؤشرات إلى هذه الكائنات. وفيما يلي مثال (من الدكتور دوبس):

vector<Object *> v ;

v.push_back( new Object( ... ) ) ;
...
vector<Object *>::iterator last =
partition( v.begin(), v.end(), not1(predicate()) ) ;
for( vector<Object *>::iterator i = last ; i != v.end() ; ++i )
{
  delete *i ;
}
v.erase( last, v.end() ) ;

وأنا الحيرة على النحو المناسب لالمسند. الكائنات الخاصة بي هي من سلالة الدرجة، وبلدي ناقلات هو متجه <سلالة *> liveStrains. وينبغي أن يكون المسند الدالة العضو سلالة isExtinct (). لا يعمل يلي:

 vector< Strain * >::iterator last = partition( liveStrains.begin(), liveStrains.end(), not1(std::mem_fun_ref(&Strain::isExtinct)) );

وأستطيع أن أرى أن أحاول أن استدعاء وظيفة عضو في مؤشر إلى الكائن بدلا من الكائن نفسه. للالتفاف على هذا، حاول تغيير وإلى * (من الواضح أنني مبتدئ)، وحاولت خلق وظيفة عضو لمحاكاة الطبقة التي لا وliveStrains تحديث في دالة عضو. لست متأكدا من انه يستحق الخوض في تفاصيل ما لم تنجح. أنا الخلط بشدة من الخيارات النحوية المتاحة، أو إذا ما أحاول القيام به هو حتى المسموح بها.

ويرجع الفضل في ذلك مسبقا لأية مساعدة.

هل كانت مفيدة؟

المحلول

والحل هو استخدام الأمراض المنقولة جنسيا :: mem_fun ، وهو قدم للمؤشرات إلى الأشياء، بدلا من الأمراض المنقولة جنسيا :: mem_fun_ref.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top