두 요소 Vector
구조체를 만들었으므로 +
연산자에 과부하를 걸고 싶습니다.구조체에 대한 참조에 특성 추가 기능을 구현하려면 어떻게해야합니까?
필자의 모든 함수와 메서드가 값이 아닌 참조를 취하고 +
연산자가 같은 방식으로 작동하기를 원합니다.
impl Add for Vector {
fn add(&self, other: &Vector) -> Vector {
Vector {
x: self.x + other.x,
y: self.y + other.y,
}
}
}
어떤 변형을 시도 하느냐에 따라 평생 문제가 발생하거나 유형이 일치하지 않습니다. 특히 &self
인수가 올바른 유형으로 취급되지 않는 것으로 보입니다.
템플릿 인수가 impl
이고 Add
인 예제를 보았지만 다른 오류가 발생했습니다.
찾았지만 use std::ops::Mul;
을 맨 위에 넣어도 응답 코드가 작동하지 않습니다.
I는 "참조를 사용하는 이유, 당신은 두 개의 필드가"
내가 동의하지 않습니다 (ed530d7a3 2015년 1월 16일 22시 41분 16초 0000) rustc 1.0.0-야간를 사용하고 답변; 100 요소 구조체를 원한다면 어떻게 될까요? 큰 구조체라도 값으로 전달해야한다는 답변을 받아 들일 것입니다. (그렇다고 생각하지 않습니다.) 구조체 크기에 대한 좋은 규칙을 알고 싶습니다. 값 대 구조체를 통해 전달하지만 현재의 질문은 아닙니다.
"100 요소 구조체를 원한다면 무엇을해야합니까?"- Rust는 RVO와 같은 최적화를 사용하여 적절한 경우 적절한 참조와 더 나은 선택을 사용합니다. – Shepmaster
@Shepmaster : RVO는 반환 값에 영향을 줄 것입니다. 반환 값은 값으로 반환됩니다. 큰 구조체의 특성을 값으로 구현해야한다는 것을 보여주는 문서를 가리킬 수 있습니까? –
필자가 아는 최고의 문서는 [포인터 반환에 관한 장] (http://doc.rust-lang.org/book/pointers.html#returning-pointers)입니다. 그러나, 나는 큰 구조체를 추가하는 예제를 만들었고 (http://is.gd/25ITa7) 생성 된 LLVM을 체크했다. (약간 구조체가 정리되었다.)'(% struct.Big * sret, % struct.Big *, % struct.Big *)'. LLVM 전문가라고 주장하지는 않지만 자동으로 참조로 돌아가는 것처럼 보입니다. – Shepmaster