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(); } 您仍然必须为三个不同的模板编写代码而根本没有任何收益(编译时优势还是代码重用?). 我的个人建议:不要仅仅因为它很酷而使用模板,在实际需要时使用它们.在大型软件视图中,这是至关重要的.你发布的设计对我有意义. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |