데이터 컨테이너에 배열이있는 클래스가 있는데 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()
를 사용하려고 시도하고있다.
error: passing '
const MyContainerClass<size>
' as 'this
' argument discards qualifiers.
note: in call to 'double* MyContainerClass<size>::begin()
[withunsigned int size = size
]'
이가 잘못 begin()
및 end()
구현에 의해 발생합니다 : const
객체가이 멤버 함수에 매개 변수로 전달하면, 나는 오류가 발생?
std::copy(begin(), end(), someOutputIterator);
STL 알고리즘을 완벽하게 준수하려면 const 및 non-const 구현을 모두 제공해야합니까, 아니면 내 클래스의 응용 프로그램에 종속적입니까? – Skipher
예, 일반적으로 둘 다 제공해야합니다. – CompuChip
@Skipher 컨테이너의 데이터를 반복자를 통해 수정할 수있게하려면 비 const 버전 만 필요합니다. – juanchopanza