2017-02-05 4 views
1

나는 다음과 같은 매크로를 작성하려고 해요 :안정적인 녹에서 함수 이름의 일부로 매크로 값을 사용할 수 있습니까?

macro_rules! impl_numeric_cast_methods { 
    ($($ty:ty)*) => { 
     $(
      fn from_$ty(v: $ty) -> Self { 
       v as Self 
      } 
     )* 
    } 
} 

from_$ty 비트 인해 매크로 위생 작동하지 않습니다. 나는 $tyident 인 경우에 (불안정한) 가능한 한 concat_idents!을 사용할 수 있다는 것을 발견했습니다. 그 외의 것은 apparently doesn't work either입니다.

a blog post about this issue 및 향후 수정 계획이 있습니다. 그러나 제 질문은 다음과 같습니다. 오늘의 녹 안정 (1.15)에서 어떻게해야합니까? 해결 방법이 있습니까?

+0

참조 http://stackoverflow.com/q/27415011/155423, http://stackoverflow.com/q/24905160/155423, 기타 다수. – Shepmaster

답변

1

적절한 해결 방법으로 추가 매개 변수로 함수 이름을 추가 할 수 있습니다. 그것은 우아한 아니지만 그것은 작동 :

impl_numeric_cast_methods(i8, from_i8, u8, from_u8); 

이 두 번째 매크로 호출을 짧게 만들 수 있지만, 내 경우에는 일을 복잡하게합니다 :

macro_rules! impl_numeric_cast_methods { 
    ($($ty:ty, $from_ty:ident),*) => { 
     $(
      fn $from_ty(v: $ty) -> Self { 
       v as Self 
      } 
     )* 
    } 
} 

는 다음과 같이 호출합니다.

+0

이 질문에서이 대답을 제거하고 사본으로 옮기는 것이 좋습니다. – Shepmaster

관련 문제