Как вы реэкспортируете обобщенную функцию c с конкретными типами? - PullRequest
2 голосов
/ 20 января 2020

У меня есть общая функция c foo<T>(). Однако я хочу специализировать функцию для типа usize. Я мог бы объявить другую функцию и вызвать функцию generi c. Однако мне интересно, есть ли какой-нибудь синтаксический сахар, который я мог бы использовать, например (псевдокод) pub use foo::<usize> as foo_usize.

use std::fmt::Debug;

fn foo<T: Debug>(a: &T) {
    println!("{:?}", a)
}

// I do not want generics, as I need to export this function as extern with #[no_mangle]
#[no_mangle]
pub extern "C" fn foo_usize(a: &usize) {
    foo::<usize>(a)
}

1 Ответ

0 голосов
/ 20 января 2020

Вам нужно будет выполнить мономорфизацию самостоятельно, явно перечислив функцию и выполнив вызов:

use std::fmt::Debug;

fn foo<T: Debug>(a: &T) {
    println!("{:?}", a)
}

#[no_mangle]
pub extern "C" fn foo_usize(a: &usize) {
    foo::<usize>(a)
}
...