我想使用Boost.Range和带有init-capture的C 1y lambdas来计算两个向量的元素差异。减去一个向量的固定(即第一个)元素的更简单情况是有效的。但是,当我尝试通过在第二个范围上增加迭代器(并使lambda可变)来计算“矢量化差异”时,我得到一个编译器错误。示例代码(请注意,我没有使用通用的 lambda,因此 g 4.8 和 Clang SVN 都可以解析此代码):
#include <iostream>
#include <iterator>
#include <vector>
#include <boost/range/algorithm.hpp>
#include <boost/range/adaptors.hpp>
template<class R>
auto delta_beg(R const& rng1, R const& rng2)
{
using Elem = typename R::value_type;
return rng1 | boost::adaptors::transformed(
[first2 = begin(rng2)](Elem const& e) {
return e - *first2;
});
}
template<class R>
auto delta_rng(R const& rng1, R const& rng2)
{
using Elem = typename R::value_type;
return rng1 | boost::adaptors::transformed(
[first2 = begin(rng2)](Elem const& e) mutable {
return e - *first2++;
});
}
int main()
{
auto r1 = std::vector<int>{ 8, 10, 12, 15 };
auto r2 = std::vector<int>{ 1, 2, 9, 13 };
// prints 7, 9, 11, 14
boost::copy(delta_beg(r1, r2), std::ostream_iterator<int>(std::cout, ",")); std::cout << "\n";
// ERROR, should print 7, 8, 3, 2
boost::copy(delta_rng(r1, r2), std::ostream_iterator<int>(std::cout, ",")); std::cout << "\n";
}
活生生的例子。在这里,g和Clang都抱怨
没有类型命名为'type'在'升压::mpl::eval_if,升压::result_of]::__lambda1(const int
问题:发生了什么?
只是闭包类型没有< code>boost::mpl显然需要的嵌套typedefs。如果您将lambda表达式转换为< code>std::function,它会起作用:
#include <iostream>
#include <iterator>
#include <vector>
#include <boost/range/algorithm.hpp>
#include <boost/range/adaptors.hpp>
template<class R>
auto delta_beg(R const& rng1, R const& rng2)
{
using Elem = typename R::value_type;
std::function<Elem(Elem const&)> f =
[first2 = begin(rng2)](Elem const& e) { return e - *first2; };
return rng1 | boost::adaptors::transformed(f);
}
template<class R>
auto delta_rng(R const& rng1, R const& rng2)
{
using Elem = typename R::value_type;
std::function<Elem(Elem const&)> f =
[first2 = begin(rng2)](Elem const& e) mutable { return e - *first2++; };
return rng1 | boost::adaptors::transformed(f);
}
int main()
{
auto r1 = std::vector<int>{ 8, 10, 12, 15 };
auto r2 = std::vector<int>{ 1, 2, 9, 13 };
// prints 7, 9, 11, 14
boost::copy(delta_beg(r1, r2), std::ostream_iterator<int>(std::cout, ",")); std::cout << "\n";
// ERROR, should print 7, 8, 3, 2
boost::copy(delta_rng(r1, r2), std::ostream_iterator<int>(std::cout, ",")); std::cout << "\n";
}
现场演示。
考虑以下几点: 为什么第一个版本是编译错误,当我已经声明lambda是可变的,并通过值捕获(我认为是它的副本)? 使用clang(x86_64-apple-darwin14.3.0)和Visual C(vc120)进行测试,这是错误消息的来源。
我有一个简单的表单,可以将一些基本信息和图像上传到我的formtools数据库。它可以在桌面上完美运行,但不能在移动设备上运行。在我的Android手机上,当我测试它时,它会要求我选择摄像头或文件浏览器。我已经尝试了摄像头和文件浏览器,我拍摄了一张照片/上传了一张图像,然后它会加载感谢页面,但当我进入表单工具数据库时,图像还没有上传。 有人知道为什么这样不行吗? 这是表格 我还尝试添加 在打开摄像
我使用的OptaPlanner有两个规划变量,其中一个定义为nullable=true。遵循会议示例(为简单起见),假设Room可以为空,但Time不能为空。 我在非空的变量上定义了一个约束,但似乎只有当可空的变量不为空时,惩罚才起作用,否则会失败。 下面是我的代码片段: 在我的约束提供者类中,我定义了以下约束来确保一个人不能参加两个单独的会议: 当创建两个具有非空值的对象时,如果假设同一个人同时
问题内容: from celery import Celery 这是我用来测试芹菜的代码。我希望每次使用addone()时,返回值都应该增加。但是为什么总是1? 结果 问题答案: 默认情况下,启动工作程序时,Celery以并发4启动它,这意味着它已启动4个进程来处理任务请求。(加上一个控制其他进程的进程。)我不知道该使用哪种算法将任务请求分配给为工作人员启动的进程,但是最终,如果执行足够,您将看到
我已经看过并尝试了几乎所有关于这个话题的其他帖子,但运气不好。 我使用的是python 3.6,所以我使用的是以下AMI
问题内容: 嗨,我只是简单地尝试在www.example.com上获取h1标签,该标签显示为“ Example Domain”。该代码适用于http://www.example.com,但不适用于https://www.exmaple.com。我该如何解决这个问题?谢谢 问题答案: PhantomJSDriver不支持(所有)DesiredCapabilities。 你会需要: 记录在这里:htt