我试图实现我自己的bind_range
,它可以与范围绑定。它应该允许客户像这样的代码:针对范围绑定函数以实现迭代功能
void f(int x, int y)
{
std::cout << x + y << ',';
}
std::vector<int> v1; // contains 1,2,3
void go()
{
boost::function<void(int y)> f_bound = bind_range(f, v1, _1);
f_bound(10); // prints 11,12,13,
}
在上面的代码,我的模板bind_range
检测v1
符合ForwardRangeConcept<>
和它的值类型是f()
的第一个参数兼容。然后它会生成一个函数对象,它将遍历v1
,为每个值调用f()
。
我知道上面的代码可以用调用代码中的每个构造的某种形式来实现,但我想要绑定函数并稍后使用它。
以上是我想达到的本质。我已阅读我的C++ Template Metaprogramming副本,并查看boost::bind
实施,但我无法开始解决方案。我也有一种唠叨的感觉,像这样的东西已经存在于Boost图书馆的某处。
扩展:
绑定多个范围。例如:
std::vector<int> v10; // contains 10,20,30
void go_multiple()
{
boost::function<void()> f_bound = bind_range(f, v10, v1);
f_bound(); // prints 11,12,13,21,22,23,31,32,33,
}
与返回类型的处理。我不需要从我的迭代调用返回类型,但可以想象有人可能想要存储或处理每个返回值。我确信这可以用某种Lamda型构造完成。
也许这是一个简单的解决方案。我想我开始喜欢的东西'模板<....>结构bind_range:提高::绑定<....> {};'然后去上专门在那里一个参数是每种情况下??? – paperjam 2011-03-31 09:34:45