new
не является так называемой «чертой» в Rust , потому что соглашение по дизайну является неограниченным; некоторые конструкторы new
принимают аргументы, другие - нет, некоторые могут дать сбой, другие безошибочны. new
- чисто условное имя; в противном случае он не имеет существенного значения в Rust . По соглашению они называются constructors
, но это обычный метод stati c.
Типаж, который вы, кажется, ищете, - это Default
, который определен для типов, для которых имеет смысл создавать новое значение без дополнительных аргументов, создающее разумное значение по умолчанию, такое как число 0
, или логическое false
, или пустую коллекцию.
В качестве альтернативы, если вы хотите преобразовать из одного аргумент, черта From
- это то, что вы желаете:
#[no_mangle]
pub extern "C" fn make<T: Default>() -> *mut T{
Box::into_raw(Box::new(T::default()))
}
Или:
#[no_mangle]
pub extern "C" fn make_from<X, T: From<X>>(x: X) -> *mut T{
Box::into_raw(Box::new(T::from(x)))
}
Ограничение Type: Trait
сообщает системе типов, что тип должен удовлетворять данной характеристике.
Если вы еще не знакомы с чертами в Rust , то они являются важной частью программирования на Rust, которую нужно освоить.