// using 模板
using SCQuery = std::function<void(LPCShapeComponent, LPIShapeComponent, CComQIPtr<IShape> p, ShapeDataVarVector& ShapeCompInfos)>;
//map容器搭配模板
std::map<long, SCQuery> scQueryMap = {
{SCT_SIZEBOX, querySizeBoxSC},
{SCT_GROUP, queryGroupSC}, //没有vc接口
};
//函数声明
void querySizeBoxSC(LPCShapeComponent pcSC, LPIShapeComponent piSC, CComQIPtr<IShape> p, ShapeDataVarVector& ShapeCompInfos)
{
}
void queryGroupSC(LPCShapeComponent pcSC, LPIShapeComponent piSC, CComQIPtr<IShape> p, ShapeDataVarVector& ShapeCompInfos)
{
}
//使用方法
auto it = scQueryMap.find(scType);
if (scQueryMap.end() != it)
{
auto SCMgr = std::make_unique<ShapeDataVarMgr>(SubMgr.get());
ShapeDataVarVector shapecompinfos;
SCQuery f = it->second;
f(pcSC, piSC, p, shapecompinfos);
for (auto info : shapecompinfos)
SCMgr->AddShapeDataVar(info);
SubMgr->AddSubMgr(SCMgr);
}
主要作用用来解决switch-case 和if-else if-else if-else 的问题
代码1
代码2