ちょっと将棋の話でも書こうと思ったのですが、驚きのコメントをいただきましたので、CustomVectorの続きを書きたいと思います。
先日、ながったらしいFor文書くのに飽きたから、簡略化できるようにstd::vectorのラッパークラスを作ったという記事を書きました。が、私がやりたかったことは、すでに実現されているらしく
std::vector< Character* > m_characterlist;
というリストにたくさんのキャラクターが登録されていた場合、
for( Character* p_character : m_characterlist){
p_character->うんちゃらかんちゃら
}
で頭から尻尾までまわせるようです。びっくりしました。また、autoという便利機能もあるようで、
for(auto p_character : m_characterlist)
でもかまわないようです。Character*のコンテナなんだから、そこの要素を取り出そうとしてる以上、p_characterはCharacter*に決まってんだろということを勝手に判断してくれるらしい?
とはいえ、すでにCustomVectorクラスを使い始めてしまったので、全部std::vectorに書き直すのはめんどくさいし、やっぱりオリジナル機能を取り付けたりはしたいので、このまま使えるようにしたいと思いました。
たびたびコメントありがとうございます。
typename std::vector<T>::iterator begin(){
return m_vector.begin();
}
という書き方が出来るんですね。
ただちょっといただいた資料がまだ飲み込めないので、型名を明示する必要がまた発生したときにでも、もうちょっと調べてみようかと思います。
Tが何者か分からない時点ではT::value_typeが型かどうか分からないというのは納得できるんですが、std::vector<T>::iteratorに関しては、Tが何者であろうとstd::vectorのiteratorのことだと分かるんじゃないかという気がするのです。
記事の最後の部分を見た感じ、もしかしたらSTLでのiteratorの扱いがそういう風になってるのかなぁという感じではあるんですが。
Effective Modern C++
検索してみた感じだと、書籍のご紹介ですかね?
私が読むには本格的過ぎる気がするので、余裕のあるときにでも・・・。
楽をしたいならgof本と合わせて読むべきです。失礼
GOF本というとあれですよね、デザインパターンの。
何年か前、C++を始めた際にデザインパターンについてはいくつかのサイトで読みましたが・・・難しいんですよね。
今ならまた違った視点で読めるようになってるのかもしれませんが、なかなか・・・。
Author:ウィア
とても地味でマニアックな同人ゲームを作っています