在实际项目中使用std::enable_if

一个类有不止一个构造函数,想在构造元素的时候,做点别的:比如给元素附加一些数据。

EditElementHandle (MSElementDescrCP descr, bool isUnmodified, DgnModelRefR modelRef);
EditElementHandle() {} 
EditElementHandle (MSElementDescrP descr, bool owned, bool isUnmodified, DgnModelRefP modelRef=NULL) ;
EditElementHandle (ElementRefP elRef, DgnModelRefP modelRef=NULL) : ElementHandle (elRef, modelRef) {}
EditElementHandle (MSElementCP el, DgnModelRefP modelRef) : ElementHandle (el, modelRef){}
EditElementHandle (ElementId id, DgnModelRefP modelRef) : ElementHandle (id, modelRef) {}

可以这样:

///生成一个element,并以schedule的方式写入排序标记
template 
typename std::enable_if::value, std::shared_ptr>::type
CreateElementHandleBySortFlag(UInt64 sortFlag,/*const*/ Args&& ... args)
{
    auto eeh = std::make_shared(std::forward(args)...); //进行构造
    KERNEL::SortEEh::SetFlagForSort(sortFlag, *eeh); //添加这么一个操作。添加一些数据

    return eeh;
}

使用的时候:

CreateElementHandleBySortFlag(sortFlag, fakeEid, modelRef);

你可能感兴趣的:(c++)