データコンテナの配列が配列されたクラスがあり、begin()
とend()
の実装があります。他のメンバ関数でSTLアルゴリズムのbegin()とend()
template <size_t size>
double * MyContainerClass<size>::begin(){
return std::begin(mContainer);
}
template <size_t size>
double * MyContainerClass<size>::end(){
return std::end(mContainer);
}
、私はそのようなstd::transform
とstd::copy
としてSTLアルゴリズムのためbegin()
とend()
を使用しようとしています。 const
オブジェクトはこれらのメンバ関数へのパラメータとして渡されたとき、私はエラーが発生します。
error: passing '
const MyContainerClass<size>
' as 'this
' argument discards qualifiers.
note: in call to 'double* MyContainerClass<size>::begin()
[withunsigned int size = size
]'
これは正しくないbegin()
とend()
の実装によって引き起こされていますか?
std::copy(begin(), end(), someOutputIterator);
STLアルゴリズムに完全に準拠するためにconst実装と非const実装の両方を提供する必要がありますか、それともクラスのアプリケーションに依存しますか? – Skipher
はい、一般的に両方を提供する必要があります。 – CompuChip
@Skipherイテレータを使用してコンテナ内のデータを変更できるようにするには、非constバージョンのみが必要です。 – juanchopanza