- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
function s(v: any): v is string
{
return typeof v === "string";
}
function main()
{
print(s("sss"));
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
function s(v: any): v is string
{
return typeof v === "string";
}
function main()
{
print(s("sss"));
}
А ты так можешь на С/C++ .. а я могу....
ASD__77 # 0
ISO # 0
https://wandbox.org/permlink/L4SDEH8qBxpMzbrl
guest # 0 ⇈
типа можно маттерин патчинг запилить?
[email protected] # 0 ⇈
guest # 0 ⇈
Тормозить будет адски, но красиво
bormand # 0 ⇈
guest # 0 ⇈
эксепшен летит если там ссылка, а если указатель то как раз нул и будет?
bormand # 0 ⇈
guest # 0 ⇈
Там сначала проверяешл тип, потом кастишь
А вкотлине уже нет
bormand # 0 ⇈
guest # 0 ⇈
получаешь указатель, проверяешь typeid, и вот
bormand # 0 ⇈
Как-то так вроде это пишется. Ни разу не юзала, на самом деле, так что могу ошибиться...
bormand # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
[email protected] # 0 ⇈
bormand # 0 ⇈
Desktop # 0 ⇈
Получается, только выносить его в отдельную лямблию и передавать два раза?
[email protected] # 0 ⇈
или воспользоваться шаблономагией:
А, понял вопрос. не на то отвечал.
Можно с auto и if constexpr в лямбде.
Desktop # 0 ⇈
[email protected] # 0 ⇈
HO9I6PbCKuu_neTyx # 0 ⇈
guest # 0
ASD__77 # 0 ⇈
bormand # 0 ⇈
ISO # 0 ⇈
> typeof v
guest # 0 ⇈
Или это детали реализации, и с точки зрения программиста RTTI есть всегда?
ISO # 0 ⇈
(RT)TI в крестах бывает разный:
1. dynamic_cast: работает для виртуальных объектов за счёт таскания с собой уко-ко-козателя на vtable;
2. typeid(X), где X — ссылка/указатель на невротуальный объект: работает в компайлтайме и всегда возвращает информацию о статическом типе X;
3. typeid(V), где V — ссылка/указатель на вротуальный объект: работает уже в рантайме за счёт проверки указателя на vtable.
Возможно, ещё что-то я пропустил, но не суть.
В общем и целом, рантайм-расходы на RTTI есть только для виртуальных объектов, которые таскают за собой таблицу вротуальных функций; для всех остальных typeid() разрешается в компайлтайме.
guest # 0 ⇈
Но это же по сути оптимизация компилятора: он МОЖЕТ статически проверить тип, вот и проверяет, а название осталось
В жавке все говно витуальное и такой оптимизации нет (хотя ее может JIT наверное)
ISO # 0 ⇈
bormand # 0 ⇈
Вроде только какой-нибудь std::is_same можно...
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
А бывает так, что компилятор не умеет в RTTI, и тогда typed взять у невиртуального питуха можно, а у виртуального (ну точнее у ссылки на нево) нельзя?
bormand # 0 ⇈
А когда включен, тупо линкер выбрасывает неиспользованное.
guest # 0 ⇈
bormand # 0 ⇈
bormand # 0 ⇈
ASD__77 # 0 ⇈
gostinho # 0