作者godfat (godfat 真常)
看板Programming
標題Re: overload []
時間Fri Jan 5 23:01:27 2007
※ 引述《tinlans ( )》之銘言:
: ※ 引述《godfat (godfat 真常)》之銘言:
: : 也支援 sub-array view 和 re-shape 的用法,詳情參考網頁
: : 不過上次我想拿他來試用時,最後卻放棄了
: : 原因是我找不到一層迴圈 travel 整個 array 的方法(也許有,那時沒找到)
: : 我希望我能寫:
: : std::for_each(arr.begin(), arr.end(), SomeFunc());
: : 而不是要 begin() 之後再 begin() 一次…
: : 所以最後我是用一維去模擬多維
: 是有辦法,但是得先自己做一個 for_each 來,
: 可能我翻 examples 的方式比較特別的關係,
: 我都是從 share/doc/boost/libs/multi_array/example 去翻範例,
: 而不是直接從網頁上看文件來找,
: 所以有找到這東西的做法。
: 如果你是安裝在 MS Windows 我就不曉得 path 了,
: 用這 URL 意思也是一樣的:
: http://www.boost.org/libs/multi_array/example/
: 這下面的 for_each.hpp 應該就是你要的東西,
: 你也可以直接拿 foreach_test.cpp 和 foreach_test2.cpp 來編看看,
: 不過我想你應該會發現 for_each.hpp 某行少了一個 typename,
: 它可能會害你沒辦法通過編譯,
: 補上去就好了。
感謝,真是漂亮的遞迴!
不過除了少一個 typename 外,我不是很懂他真正施行 functor 時為何是寫:
Val = xform(Val);
而不是
xform(Val);
覺得前者實在沒什麼道理…
要是用在 copy 成本極高的 value 上,實在不妥
而且 std::for_each 也不是這樣做的
不過老實講,我真正想要的其實還是能有一個 iterator 拜訪整個 array,
畢竟 boost::lambda 叫叫簡單東西還無妨,複雜一點就很頭大了
老是寫 custom functor 其實也很煩
我沒有仔細觀察 multi_array 的程式,那實在是有點太複雜了,短時間內看不完
所以不是很確定是否能有方法直接使用這樣一個 iterator
是有考慮寫一個 wrapper 去包,不過暫時沒什麼好想法可以簡單做到
畢竟需要儲存各個維度的 iterator, 而各個維度的 iterator 型別又不同
難道又要 template 遞迴下去嗎?|||b
像這樣?
template <class Iter, size_t dim>
struct array_iterators: public array_iterators<Iter, dim-1>{
Iter iter;
};
template <class Iter>
struct array_iterators<Iter, 0>{};
有時候真的會覺得大量使用 C++ template 會走火入魔…
--
Hear me exalted spirits. Hear me, be you gods or devils, ye who hold
dominion here:
I am a wizard without a home. I am a wonderer seeking refuge.
Sacrifice
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.232.5.168
→ godfat:嘖,reference to reference 無法解決 61.217.103.95 01/06 02:03
→ godfat:明日再繼續努力 O_o(瘋了) 61.217.103.95 01/06 02:03