●STL スレッド●
■ このスレッドは過去ログ倉庫に格納されています
0744デフォルトの名無しさん
NGNG自前のiteratorを以下のように実装しました。
***ここから1***
class aIterator; // predeclaration
class bIterator; // predeclaration
class aConstIterator; // predeclaration
class bConstIterator; // predeclaration
class aIterator : public iterator_traits<list<a>::iterator> { bIterator b; 〜; };
class bIterator : public iterator_traits<list<b>::iterator> { aIterator a; 〜; };
class aConstIterator : public iterator_traits<list<a>::const_iterator> { bConstIterator b; 〜; };
class bConstIterator : public iterator_traits<list<b>::const_iterator> { aConstIterator a; 〜; };
***ここまで1***
これは問題なくコンパイルできます。
それでiteratorとconst_iteratorの定義でかなりかぶる『〜』の部分を
templateを使って省略しようと思い以下のようにしました。
***ここから2***
template<typename T,typename U>
aIteratorBase : public itetaror_traits<T> { U b; 〜; };
template<typename T,typename U>
bIteratorBase : public itetaror_traits<T> { U a; 〜; };
typedef aIteratorBase<list<a>::iterator,bIterator> aIterator; // (*1)
typedef bIteratorBase<list<b>::iterator,aIterator> bIterator;
typedef aIteratorBase<list<a>::const_iterator,bConstIterator> aConstIterator;
typedef bIteratorBase<list<b>::const_iterator,aConstIterator> bConstIterator;
***ここまで2***
でもこれだと(*1)の部分でbIteratorが未定義なので当然コンパイルできません。
最初の方法だと同じような記述がずらずらと続いて
見た目も美しくなく保守も大変なんですが、何か良いやり方はないでしょうか?
■ このスレッドは過去ログ倉庫に格納されています