سؤال

كيف يمكنني عكس قيمة إرجاع المسند ، وإزالة العناصر التي تعود خاطئة بدلاً من الصحيح؟

ها هو رمزتي:

headerList.remove_if(FindName(name));

(من فضلك تجاهل الافتقار إلى المحو)

مع FindName a functor بسيط:

struct FindName
{
    CString m_NameToFind;

    FindInspectionNames(const CString &nameToFind)
    {
        m_NameToFind = nameToFind;
    }

    bool operator()(const CHeader &header)
    {
        if(header.Name == m_NameToFind)
        {
            return true;
        }

        return false;
    }
};

أود شيء مثل:

list.remove_if(FindName(name) == false);

عدم استخدام C ++ 0x بعد ، لذلك لا يسمح Lambdas ، للأسف. آمل أن يكون هناك حل أجمل من كتابة functor notfindname.

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

المحلول

يفحص not1 في ال <functional> رأس:

headerList.remove_if( std::not1( FindName( name ) ) );

أوه ، وهذا:

if(header.Name == m_NameToFind)
{
    return true;
}

return false;

لو سمحت لا تفعل ذلك.

return ( header.Name == m_NameToFind );

هذا كثير أفضل ، أليس كذلك؟

نصائح أخرى

بدلاً من ذلك ، يمكنك استخدام ربط Boost حتى لا تضطر إلى كتابة بنية Unary_Function:

bool header_has_name (const CHeader& h, const CString& n) {return h.name == n;}

headerList.remove_if (boost::bind (header_has_name, _1, "name"));

وللإزالة:

headerList.remove_if (!boost::bind (header_has_name, _1, "name"));

يمكنك حتى استخدام std :: equal () لتجنب وظيفة header_has_name تماما ولكن في هذه المرحلة تصبح قبيحة بعض الشيء.

لسوء الحظ ، أعتقد أن كتابة notfindname functor هو أفضل رهان لك.

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