์:
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());
์๋์, ์ด๊ฒ์ ํ์ดํ ์คํฌ๋ฆฝํธ์์๋ ๊ฐ๋ฅํ์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
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
๋ฐ์ดํฐ ์ ํ์ ์ ์์ ์ผ์นํ๋์ง ํ์ธํด์ผํฉ๋๋ค.
์ด๊ฒ์ ์์ ํ์ง ์์ผ๋ฉฐ ๋ฌด์์ํ๊ณ ์๋์ง ์์์ผํฉ๋๋ค.
๊ฐ์ฌ
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋์, ์ด๊ฒ์ ํ์ดํ ์คํฌ๋ฆฝํธ์์๋ ๊ฐ๋ฅํ์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.