基于条件的模板重载

问题描述

使用特征类型,我可以执行以下操作:

template<typename Rect> Rect& move(Rect& rc,size_type<Rect> delta)
{
    rc.left += delta.width;
    rc.right += delta.width;
    rc.top += delta.height;
    rc.bottom += delta.height;
    return rc;
}
template<typename Rect> Rect& move(Rect& rc,point_type<Rect> to)
{
    int w = w(rc);
    int h = h(rc);
    rc.left = to.x;
    rc.top = to.y;
    rc.right = rc.left + w;
    rc.bottom = rc.top + h;
    return rc;
}

但是如何允许在不更改函数名称的情况下传递任何大小和点类型?显然我不能这样做:

template<typename Rect,typename Size> Rect& move(Rect& rc,Size delta);
template<typename Rect,typename Point> Rect& move(Rect& rc,Point to);

我想做的是

template<typename Rect,typename Size /*if Size::width,use this*/> Rect& move(Rect& rc,Size size);
template<typename Rect,typename Point /*if Point::x,Point to);

即选择重载取决于模板参数是否具有特定成员。在c ++中可以吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)