gpt4 book ai didi

C++:如何创建动态模板类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:00:12 24 4
gpt4 key购买 nike

我有以下代码,我创建它用于更改 OpenCV 图像(Cv::Mat 类)中像素的强度。

如您所见,我在两种情况下都进行了循环,但模板类型不同。

“传输”函数可以重载。

因此,我的问题是,如何创建动态模板类型以使其看起来更好......

Mat mat = _mat.clone() ;
int channels = mat.channels();

switch(channels)
{
case 1:
for (int i=0; i<mat.rows; i++)
{
for (int j=0; j<mat.cols; j++)
{
uchar src = mat.at<uchar>(i,j);
uchar dst = mat.at<uchar>(i,j);

t.transfer(src, dst);
}
}
break;

case 3:
for (int i=0; i<mat.rows; i++)
{
for (int j=0; j<mat.cols; j++)
{
Vec3b src = mat.at<Vec3b>(i,j);
Vec3b dst = mat.at<Vec3b>(i,j);

t.transfer(src, dst);
}
}
break;
}

return mat ;

最佳答案

这样的事情怎么样:

template <typename U, typename T>
void transfer_mat(Mat & mat, T & t)
{
for (int i = 0, r = mat.rows; i != r; ++j)
{
for (int j = 0, c = mat.cols; j != c; ++j)
{
U src = mat.at<U>(i, j);
U dst = mat.at<U>(i, j);

t.transfer(src, dst);
}
}
}

然后你可以说:

switch(channels)
{
case 1:
transfer_mat<uchar>(mat, t);
break;
case 2:
transfer_mat<Vec3b>(mat, t);
break;
}

关于C++:如何创建动态模板类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10146850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com