在下面的示例中,我有三个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();
}
您仍然将不得不为三个不同的模板编写代码,而根本没有收获(编译时优势或代码重用在哪里?)。
我的个人建议:不要仅仅因为模板很酷就使用模板,请在实际需要时使用它们。在大型软件视图中,这至关重要。您发布的设计对我来说很有意义。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句