範囲依存forループの場合、引数従属ルックアップの動作を理解しようとしていました。私は、私の型と同じ名前空間内の自由な関数として自分の型のbeginとendを実装します。ランタイムアサーションに失敗しました。ラッパークラス用の逆参照できないベクターイテレーター(end de()参照外)なし
発現:それを見て取るため
namespace my { struct MyType { std::vector<int> hiddenData; MyType(int i) : hiddenData(i) {} }; auto begin(MyType obj) { return obj.hiddenData.begin(); } auto end(MyType obj) { return obj.hiddenData.end(); } } void test() { my::MyType m(5); for (auto& e : m) std:: cout << e << std:: endl; }
ありがとう:ベクトルのイテレータ
は、ここに私が書いたサンプル・コードであるdereferncableありません!
【forループでdereferencableないベクトルイテレータ(http://stackoverflow.com/questions/18636941/vector-の可能性のある複製をiterator-not-dereferencecable-in-for-loop) – mutantkeyboard
あなたの 'begin()'と 'end()'関数は意図したとおりに動作しない可能性があります。 –
彼らは基本となるベクトルのbegin()とend()への呼び出しをバイパスします。彼らは問題になるかもしれないと思うが、明白な理由はない。 – ashutosh