Страница 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 - количество классов в иерархии. Т.е сгенерированный код линейно сверяет идентификаторы типа по списку, причем идентификаторы типа это строки.