Assemblyscript: Можно ли вызвать статическую функцию для универсального типа<t>?</t>

Созданный на 15 мар. 2019  ·  3Комментарии  ·  Источник: AssemblyScript/assemblyscript

Пример:

class Temp {
  static decode(buf: Uint8Array): Temp {
    return new Temp(); 
  }
}

function decode<T>(buf: Uint8Array): T {
  return T.decode(buf);
}

let a = decode<Temp>(new Uint8Array());
question

Самый полезный комментарий

Нет, в машинописном тексте это тоже невозможно.
Но вы могли бы сделать что-то вроде этого:

class Base {
  static decode<T>(buf: Uint8Array): T {
    return instantiate<T>(); // `instantiate` is AssemblyScript's builtin
  }
}

class Temp extends Base {
}

let a = Base.decode<Temp>(new Uint8Array(1));

Все 3 Комментарий

Нет, в машинописном тексте это тоже невозможно.
Но вы могли бы сделать что-то вроде этого:

class Base {
  static decode<T>(buf: Uint8Array): T {
    return instantiate<T>(); // `instantiate` is AssemblyScript's builtin
  }
}

class Temp extends Base {
}

let a = Base.decode<Temp>(new Uint8Array(1));

Если вы знаете, что вывод является ссылкой, вы можете использовать макрос changetype следующим образом.

changetype<T>(changetype<usize>(T.decode(buf)));

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

Это небезопасно, и вам нужно знать, что вы делаете.

Спасибо

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

drachehavoc picture drachehavoc  ·  6Комментарии

Iainmon picture Iainmon  ·  3Комментарии

MaxGraey picture MaxGraey  ·  3Комментарии

kungfooman picture kungfooman  ·  5Комментарии

DanielMazurkiewicz picture DanielMazurkiewicz  ·  4Комментарии