我試圖實現我自己的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