Похоже, T::Balance
и T::AcountId
являются ассоциированными типами некоторой черты, поэтому их можно использовать только в том случае, если эта черта, скажем MyTrait
, реализована для T
. Вы можете сказать компилятору, что T
реализует MyTrait
, добавив границу черты:
pub struct CustomDataType<T: MyTrait> {
data: Vec<u8>,
balance: T::Balance,
owner: T::AccountId,
}
В общем случае вы можете принимать свойства, методы и связанные типы универсального типа только в том случае, если тип ограничен соответствующими границами типов. (Единственное исключение состоит в том, что параметры типа по умолчанию считаются размера , поэтому вы можете сделать это предположение без явной границы.)