我几乎没有学会如何并行使用函数。下面的代码行计算索引的平方值,并将其放在该索引的数组(称为square)中。 parallel_for函数在Visual Studio 2010中可用,作为标题下的Concurrency命名空间的一部分。
parallel_for(static_cast<size_t>(0), count,
[&squares](size_t n) { squares[n] = (n+1)*(n+1); });
你可以看到它使用lambda表达式来并行计算平方,这段代码可以正常工作和编译。但是,lambda表达式将parallel_for函数与代码混为一谈。我只想在函数对象中定义lambda表达式,例如:
function<void(size_t)> Squares =
[&squares](size_t n) { squares[n] = (n+1)*(n+1); };
我的问题是如何在parallel_for函数中使用此函数(Squares)?我是否错误地编写了Squares函数,或者这只是parallel_for使用lambda表达式的范例?除了微软之外,您可以向我推荐一些其他并行库,但我仍然想知道我的问题的答案。
答案 0 :(得分:3)
任何lambda表达式都可以被认为是相应函数对象的匿名版本。
在您的示例中,您的仿函数可以正常工作,如下所示:
parallel_for(static_cast<size_t>(0), count, Squares);
来自MSDN docs:
lambda表达式是一种编程 与匿名相关的技术 功能。匿名函数是一个 具有身体的功能,但没有 有一个名字。一个lambda表达式 隐式定义一个函数对象 class并构造一个函数对象 该类型。
答案 1 :(得分:0)
MSFT的示例都直接使用Lambda。