加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 如何将三个函数转换为一个通用函数?

发布时间:2020-12-16 09:52:49 所属栏目:百科 来源:网络整理
导读:我在下面的示例中有三个getColors函数. 问题:如何将threee getcolors函数转换为一个泛型函数? struct EcvColorMap{ vectorScalar getColors(){ vectorScalar result; //.... return result; }};struct Scalar{ int val[3];}; vectorScalar getColors(vecto
我在下面的示例中有三个getColors函数.

问题:如何将threee getcolors函数转换为一个泛型函数?

struct EcvColorMap{
    vector<Scalar> getColors(){
        vector<Scalar> result;
        //....
        return result;
    }
};
struct Scalar{
   int val[3];
};

    vector<Scalar> getColors(vector<Scalar> colors){
        return colors;
    }
    vector<Scalar> getColors(Scalar color){
        return{ color };
    }
    vector<Scalar> getColors(EcvColorMap color_map){
        return color_map.getColors();
    }

解决方法

问题是:函数的主体是不同的,如果你试图制作一个通用的,并使其他部分专业化,完全专业化,如

template<typename T> vector<Scalar> getColors(T colors) {
    return {colors};
}

//template<typename T> vector<Scalar> getColors(vector<T> colors) { // Not really necessary - see list initialization
//  return colors;
//}

template<> vector<Scalar> getColors<EcvColorMap>(EcvColorMap colors) {
    return colors.getColors();
}

您仍然必须为三个不同的模板编写代码而根本没有任何收益(编译时优势还是代码重用?).

我的个人建议:不要仅仅因为它很酷而使用模板,在实际需要时使用它们.在大型软件视图中,这是至关重要的.你发布的设计对我有意义.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读