iterator
を対応するconst_iterator
にマップするメタ機能f
はありますか?イテレータからconst_iteratorを取得
I.e. f<std::vector<T>::iterator>::type
はstd::vector<T>::const_iterator
となるはずです。
iterator
を対応するconst_iterator
にマップするメタ機能f
はありますか?イテレータからconst_iteratorを取得
I.e. f<std::vector<T>::iterator>::type
はstd::vector<T>::const_iterator
となるはずです。
私はこのようなメタ機能を認識していません。
すべてのイテレータに対応するconst_iteratorがあるわけではありません。例えば。 insert_iterator。そのようなメタファンクションは、そのような場合に何が起こるかを決める必要があります。
私はreverse_iterator
の何かを考えることができます:base
メンバー関数decltype
を使用して、戻り値の型を抽出してiterator
に戻ることができます。
しかし、iterator
/const_iterator
にはそのような機能がありません。内部typedefを提供するか、明示的に特殊化する必要があるかどうかは分かりません。
私はあなたの問題への一般的な解決策を考える(ともポータブルだろう一つはできません)。少なくとも私は想像することはできません:-)。
ここでの困難な問題は、コンテナがconst_iteratorのタイプを定義することです。コンテナのconst_iterator型に到達するには、コンテナの型を決定する必要があります。あなたはメタ関数のパラメータとしてコンテナのイテレータ型で開始した場合
は、しかし、容器の種類を取得することはできません。あなたが欲しいものを、既知のT(S)のために
は...しかし
を達成することができイテレータ型の間には明確に定義されたマッピングがしばしばありますので、私はこれが可能だとは思いません。例えば、2つのコンテナは、非constイテレータ型を共有することができるが、異なるイテレータを有する。一般的には、コンテナ型からイテレータ型にしかマッピングできませんが、イテレータ型とイテレータ型からコンテナ型にはマッピングできません。