Каким образом выбирается версия функции, принимающей указатель на полиморфный класс?

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Может сионист просто троллит?
Ну я понимаю троллинг Виталия Луговского. Светлый ум, фундаментальное физ-мат образование, работа в Институте Физики Высоких Энергий, коммандировки в ЦЕРН, а в этих ваших интернетах куча непуганных идиотов с гуманитарным образованием. Пока жена и уютный домик в Лондоне не появились занять себя было нечем. А это же мазохизм какой-то.
2B OR NOT(2B) = FF
Аватара пользователя
Сионист
Сообщения: 1211
Зарегистрирован: 31 мар 2014, 06:18

Ну я понимаю троллинг Виталия Луговского. Светлый ум, фундаментальное физ-мат образование, работа в Институте Физики Высоких Энергий, коммандировки в ЦЕРН,
И? Какое всё перечисленное имеет отношение к программированию? А у меня диссертация по 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));
}
. Но внутри одного проекта, а не по указателю на функцию.
Писать можно на чём угодно, но зачем же так себя ограничивать? Пиши на c.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Можно/не можно. Хватит рассуждать. Ты цитату из Страуструпа обещал. Где она? :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Код: Выделить всё

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 - количество классов в иерархии. Т.е сгенерированный код линейно сверяет идентификаторы типа по списку, причем идентификаторы типа это строки.
2B OR NOT(2B) = FF
Ответить