sfml 라이브러리의 "sf :: Vector2"템플릿 클래스 (기본적으로 지정된 유형의 x 및 y 매개 변수 만 포함)에 대한 연산자를 작성하려고합니다. "Vector-Vector"와 "Vector-Scalar/Scalar-Vector"상호 작용에 관한 기본적인 산술 연산자를 구현해야합니다. 여기에 내가 (곱하기 연산자) 지금까지 한 일의 예입니다템플릿 함수 sfml 벡터로 인한 오버로드 해상도
//multiply vectors
template<typename TResult, typename TLeft, typename TRight>
inline auto operator*(const sf::Vector2<TLeft>& lhs, const sf::Vector2<TRight>& rhs){
return sf::Vector2<TResult>(lhs.x * rhs.x, lhs.y * rhs.y);
}
//multiply sf vector and scalar
template<typename VT, typename ST>
inline auto operator*(const sf::Vector2<VT>& vect, const ST& scalar) {
return sf::Vector2<VT>(vect.x * scalar, vect.y * scalar);
}
template<typename VT, typename ST>
inline auto operator*(const ST& scalar, const sf::Vector2<VT>& vect) {
return vect * scalar;
}
문제는 그 나는 이와 같은 연산자, 호출 할 때 :
sf::Vector2<int> v1, v2;
sf::Vector2<int> v3 = v1 * v2;
의 두 번째 버전을 그러한 연산자 (스칼라를 포함하는 연산자)는 컴파일러에 의해 사용되며 결과적으로 오류가 생성됩니다. 나는 이것이 일어나지 않을 것이라고 생각했다. 그리고 컴파일러는 오버로드 해상도 덕분에 연산자의 첫 번째 버전을 고려했을 것이다. (이 함수는 하나의 벡터와 제네릭 타입 대신 두 개의 벡터를 수용한다.) 나는 무엇을 이해하지 못합니까?