利用bind绑定重载函数

出现重载的时候,Bind无法推导出正确的重载类型,需要显示的指定,实例代码如下:
BOOL CJDTDrawer::Draw()
{
const CJDTGraph& gphJDT = GetGphJDT();
CJDTGraph::ConstItSetVertex itVtxJDT;
for ( itVtxJDT = gphJDT.vtxBegin(); itVtxJDT != gphJDT.vtxEnd(); ++ itVtxJDT )
{
    CXTGraph::ConstItSetVertex itVtxXT;
    const CXTGraph& gphXT = itVtxJDT->gphXT;
    for ( itVtxXT = gphXT.vtxBegin(); itVtxXT != gphXT.vtxEnd(); ++ itVtxXT )
    {
        std::for_each( 
            itVtxXT->vctpEntity.begin(), itVtxXT->vctpEntity.end(), 
//              std::ptr_fun< AcDbEntity*, Acad::ErrorStatus >( ArxDbgUtils::addToCurrentSpaceAndClose )
            boost::bind< Acad::ErrorStatus, AcDbEntity* >( ArxDbgUtils::addToCurrentSpaceAndClose, _1 )
            );
    }
}

return TRUE;
}


void CYPackageEvent::appendEvent(CYEventSharedPtr pEvent)
{
if (std::binary_search(STD_RANGE(m_lstEvent), pEvent))
{
    return;
}
orderInsertT(m_lstEvent, pEvent);
}
void CYPackageEvent::appendEvent(const CYEventSharedPtrList& lstEvent)
{
    std::for_each(STD_RANGE(lstEvent), BD<void, CYPackageEvent, CYEventSharedPtr>(&CYPackageEvent::appendEvent, this, _1));
}

重载函数太多,且参数不同的时候,需要显示的指定绑定的模板参数
CYGeCurves cvAxis;
CHECK_EOK_RET(arrAxis.foreach(BD<Acad::ErrorStatus, CYGeCurves, CPAcDbEntity>
    (&CYGeCurves::push, &cvAxis, BD(UPXRiverAxisPtrArray::ToNativePointer(), _1))));
 
/// <summary>
/// 从别的实体拷贝属性到当前实体.
/// </summary>
Acad::ErrorStatus copyPropertyFrom(CRAcDbObjectId idEnt);
 
/// <summary>
/// 从别的实体拷贝属性到当前实体.
/// </summary>
Acad::ErrorStatus copyPropertyFrom(const UPXEntity& val);
 
/// <summary>
/// 从别的实体拷贝属性到当前实体.
/// </summary>
Acad::ErrorStatus copyPropertyFrom(const UPXEntity* pVal);
 
 
UPXEntityPtrArray arrTarget(dv.rget_idEntTo(), AcDb::kForWrite);
WARING_NOT_EOK(arrTarget.foreach(BD<Acad::ErrorStatus, UPXEntity, CPUPXEntity>(&UPXEntity::copyPropertyFrom, _1, &spFrom)));




posted @ 2012-08-24 10:03  胖胖熊  阅读(1255)  评论(0编辑  收藏  举报