我正在尝试从Internet上找到的图像的C#转换为C ++的过滤功能,以便可以编译DLL并将其用于我的项目中。
原始的C#代码为:

    Parallel.For(0, height, depthArrayRowIndex => {
        for (int depthArrayColumnIndex = 0; depthArrayColumnIndex < width; depthArrayColumnIndex++) {
            var depthIndex = depthArrayColumnIndex + (depthArrayRowIndex * width);
            .
            .
            .
            ... other stuff ...
    }


我的问题的第一部分是:如何

    depthArrayRowIndex => {


作品?
depthArrayRowIndex的含义是:

    var depthIndex = depthArrayColumnIndex + (depthArrayRowIndex * width);


这是我的C ++翻译:

    concurrency::parallel_for(0, width, [&widthBound, &heightBound, &smoothDepthArray] () {
        for (int depthArrayColumnIndex = 0; depthArrayColumnIndex < width; depthArrayColumnIndex++) {
            int depthIndex = depthArrayColumnIndex + (depthArrayRowIndex * width);
            .
            .
            .
            ... other stuff ...
    }


但显然depthArrayRowIndex在这里没有任何意义。
如何在C ++中的有效代码中转换C#代码?

非常非常感谢你 !!! :-)

最佳答案

在这种情况下,“ depthArrayRowIndex”是lambda函数的输入参数,因此在您的C ++版本中,您可能需要更改

[&widthBound, &heightBound, &smoothDepthArray] ()


对于

[&widthBound, &heightBound, &smoothDepthArray] (int depthArrayRowIndex)


如果您想进一步了解C#lambda语法,此链接可能会很有用

http://msdn.microsoft.com/en-us/library/vstudio/bb397687.aspx

08-05 13:19