- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
interface Something {
r: number;
g: number;
b: number;
toString: () => string;
}
function main() {
const something = {
r: 11.0, g: 12.0, b: 13.0, toString() {
return "Hello " + this.b;
}
};
const iface = <Something>something;
print(iface.toString());
print("done.");
}
ASD_77 28.10.2021 17:08 # 0
guest6 28.10.2021 17:10 # 0
ASD_77 28.10.2021 17:46 # 0
j123123 28.10.2021 21:38 # 0
ASD_77 28.10.2021 22:06 # +1
j123123 28.10.2021 22:41 # +2
bormand 29.10.2021 14:03 # 0
j123123 29.10.2021 15:53 # 0
bormand 29.10.2021 19:43 # 0
ASD_77 28.10.2021 22:06 # 0
bormand 29.10.2021 20:14 # 0
bormand 30.10.2021 17:59 # 0
ASD_77 30.10.2021 22:50 # 0
j123123 31.10.2021 05:02 # 0
Если это две разные функции, можно просто написать две разные структуры и две разные функции, и никаких проблем.
Okm9I6PbCKuu_nemyx 31.10.2021 05:10 # 0
j123123 31.10.2021 05:16 # +1
Okm9I6PbCKuu_nemyx 31.10.2021 05:24 # 0
Можно ли так в тупоскрипте, не знаю.
ASD_77 31.10.2021 15:12 # 0
j123123 31.10.2021 05:13 # 0
Вот тут может вызваться iface.toString() из something или something2 верно? Значит, в iface должна быть некая информация о том, какая там структура вхуячена, а это уже анскильное говно как по мне. Но это конечно можно разрулить тем или иным способом, например через крестопарашный "std::variant" или через union с какой-то хуйней, которая б указывала на то, интерпретируем мы это говно как такую или как такую говноструктуру, и на основе этого вызывается то или иное говно
Okm9I6PbCKuu_nemyx 31.10.2021 05:19 # 0
Мне кажется, это можно сделать без RTTI. На этапе компиляции известно, какое поле в какое копировать. Компилятор рассчитает смещения. Указатель на функцию можно хранить как указатель на виртуальный метод.
ASD_77 31.10.2021 15:17 # 0
ASD_77 31.10.2021 15:18 # 0
CHayT 28.10.2021 21:45 # +2
nPOnOBeDHuK 31.10.2021 23:45 # 0