아르마딜로 벡터의 요소에 대한 참조를 반환하는 방법을 결정하는 데 어려움을 겪고 있습니다.아르마딜로 벡터 요소에 대한 참조 반환
이struct Custom {
arma::vec3 v;
double& x() { return v.at(0) }
}
Custom custom;
custom.x() = 1;
오류는 다음과 같다 :
arma::vec3 v = arma::zeros(3);
v.at(0) = 1; // works as expected, surely this means the at() method returns a reference?
그러나이 컴파일되지 않습니다
error: invalid initialization of reference of type ‘double&’ from expression of type ‘const double’
나는()에서 대신 참조의 사본을 반환하기 때문에이 가정하지만, 이전 예제는 어떻게 작동합니까?
나는 이것이 실제 'double'보다는 오히려 반환되는 armadillo의 접착제 타입 때문일 수 있다고 생각하지만, 이것들에 대한 문서를 찾을 수 없으므로 사용 방법을 확신 할 수 없습니다.
대답
아래의 방법은 벡터 요소에 '참조 같은'라는 이름의 액세스를 제공, 작동합니다.
inline double x() const { return at(0); }
inline double& x() { return at(0); }
inline double y() const { return at(1); }
inline double& y() { return at(1); }
inline double z() const { return at(2); }
inline double& z() { return at(2); }
inline const arma::subview_col<double> xy() const { return rows(0,1); }
inline arma::subview_col<double> xy() { return rows(0,1); }
두 번째 경우에는'x()'const를 만들었습니다. 'x()'다음에'const'를 잃거나,'arma :: vec3' 다음에 하나 추가하십시오. (또는 두 버전을 모두 제공하고 싶을 수도 있습니다.) –
아 물론! 우수한! 그것은 작동하고있는 것 같습니다 :) –