精華區beta Programming 關於我們 聯絡資訊
※ 引述《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