Страница 3 из 3
Re: Каким образом выбирается версия функции, принимающей указатель на полиморфный кла
Добавлено: 07 янв 2016, 21:58
Absurd
Может сионист просто троллит?
Ну я понимаю троллинг Виталия Луговского. Светлый ум, фундаментальное физ-мат образование, работа в Институте Физики Высоких Энергий, коммандировки в ЦЕРН, а в этих ваших интернетах куча непуганных идиотов с гуманитарным образованием. Пока жена и уютный домик в Лондоне не появились занять себя было нечем. А это же мазохизм какой-то.
Re: Каким образом выбирается версия функции, принимающей указатель на полиморфный кла
Добавлено: 10 янв 2016, 16:42
Сионист
Ну я понимаю троллинг Виталия Луговского. Светлый ум, фундаментальное физ-мат образование, работа в Институте Физики Высоких Энергий, коммандировки в ЦЕРН,
И? Какое всё перечисленное имеет отношение к программированию? А у меня диссертация по 05.13.18. Кстати, очевидно же, что если по смещению -2 лежит RTTI, то можно под
понимать, например,
Код: Выделить всё
switch (p->RTTI())
{
case ...: return f(dynamic_cast<...*>(p));
case ...: return f(dynamic_cast<...*>(p));
case ...: return f(dynamic_cast<...*>(p));
...
case ...: return f(dynamic_cast<...*>(p));
}
. Но внутри одного проекта, а не по указателю на функцию.
Re: Каким образом выбирается версия функции, принимающей указатель на полиморфный кла
Добавлено: 10 янв 2016, 17:00
Romeo
Можно/не можно. Хватит рассуждать. Ты цитату из Страуструпа обещал. Где она?

Re: Каким образом выбирается версия функции, принимающей указатель на полиморфный кла
Добавлено: 10 янв 2016, 17:33
Absurd
Код: Выделить всё
switch (p->RTTI())
{
case ...: return f(dynamic_cast<...*>(p));
case ...: return f(dynamic_cast<...*>(p));
case ...: return f(dynamic_cast<...*>(p));
...
case ...: return f(dynamic_cast<...*>(p));
}
Вызов виртуальной фукции должен иметь сложность O(1). switch же имеет сложность O(log N) если компилятор балансирует бранчи. При этом производительностью dynamic_cast<> мало кто озадачивается и поговаривают что на многих популярных реализациях она O(N), где N - количество классов в иерархии. Т.е сгенерированный код линейно сверяет идентификаторы типа по списку, причем идентификаторы типа это строки.