지난 몇 달 동안 녹을보고 있었지만 방금 실제 프로젝트를 시작했습니다. 제목의 용어가 정확한지 확실하지 않습니다. 그것이 어떻게 시정 될 수 있는지 알려주십시오.구체적인 유형 대신 특성으로 지정되는 선택적 함수 인수
나는 ENet 라이브러리 (http://enet.bespin.org) 주위에 녹 포장지를 쓰고 있습니다. 내 목표는 녹슬지 않는 API를 C API와 비슷한 것으로 유지하는 것입니다. 리팩터링 함수는 C 스타일 핸들 포인터를 사용하여 구조체 개체의 멤버 함수로 처리합니다. API를 비슷하게 유지하여 공식 C 문서가 녹 포장지에도 똑같이 적용될 수 있도록하고 싶습니다.
ENet는 클라이언트 호스트 또는 서버 호스트를 생성하는 단일 함수를 제공합니다. 서버를 만들 때 함수에 IP 주소 구조에 대한 포인터를 전달합니다. 클라이언트를 만들 때 NULL을 전달합니다.
ToSocketAddr
특성과 Option
특성을 사용하여 해당 동작을 에뮬레이트하려고하는데이 문제를 함께 사용하고 있습니다.
이것은 내가 뭘하려고 오전의 감소 예입니다 : 마법처럼
use std::io::net::ip::ToSocketAddr;
fn create_host<A: ToSocketAddr>(addr: Option<A>) {
match addr {
Some(a) => println!("Address is {}. Return a server host object.",a.to_socket_addr()),
None => println!("no address... Return a client.")
};
}
fn main() {
create_host(Some("localhost:12345"));
create_host(None);
}
첫 번째 호출 create_host()
하기 위해 노력하고 있습니다. 그러나 두 번째 호출은 컴파일되지 않습니다. 내가 None
는 일반 A
에 대한 해상도를 제공하지 않기 때문에 해당 오류가 발생하는 추측하고
error: unable to infer enough type information about `_`; type annotations required
Rustc을 반환합니다. 나는 다음을 시도했다. 그러나 ToSocketAddr
이 특성 core::kinds::Sized
을 구현하지 않기 때문에 이것은 작동하지 않는다.
fn create_host(addr: Option<ToSocketAddr>) {
...
}
내가 할 수있는 방법이 있습니까? 아니면 다른 접근 방식을 취해야합니까?
감사합니다. 이전에 어떤 예에서도 'None'에 적용된 구문을 보지 못했습니다. 왜/어떻게 작동하는지 정확히 설명하는 링크가 있습니까? –
[경로] (http://doc.rust-lang.org/reference.html#paths) 및 [일반 기능] (http://doc.rust-lang.org/reference.html#generic-functions)을 참조하십시오. 녹 참조. 'None'은 일반적인 함수가 아니라 generic/polymorphic 상수입니다. 그러나 type 인자 목록 구문은 여전히 적용됩니다. –
감사합니다. 도움이되었습니다. –