Нет выхода? C ++ 14

Достаточно достойный ответ на этот вопрос фактически включен в вопрос о позднем и раннем привязке к programers.stackexchange.com .

Короче говоря, поздняя привязка относится к объекту - стороне eval, динамическая отправка относится к функциональной стороне. При позднем связывании тип переменной является вариантом во время выполнения. В динамической диспетчеризации выполняется функция или подпрограмма.

В C ++ у нас на самом деле нет поздней привязки, потому что известен тип (не обязательно конец иерархии наследования, но по крайней мере формальный базовый класс или интерфейс) , Но мы делаем динамическую отправку с помощью виртуальных методов и полиморфизма.

Лучший пример, который я могу предложить для позднего связывания, - это нетипизированный «объект» в Visual Basic. Среда выполнения выполняет весь тяжелый подъем для вас.

Dim obj

- initialize object then..
obj.DoSomething()

Компилятор фактически закодирует соответствующий контекст выполнения для среды выполнения для выполнения именованного поиска метода с именем DoSomething , и если они обнаружены с соответствующими параметрами соответствия, фактически выполните основной вызов. В действительности, что-то о типе объекта известно (он наследует от IDispatch и поддерживает GetIDsOfNames() и т. Д.). но в отношении языка тип переменной во время компиляции совершенно неизвестен, и он не знает, является ли DoSomething даже методом для любого obj на самом деле равно , пока время выполнения не достигнет точки выполнения.

Я не буду беспокоить демпинг виртуального интерфейса C ++ et'al, так как я уверен, вы уже знаете, что они выглядит как. Надеюсь, что язык C ++ просто не может этого сделать. Он строго типизирован. Он может (и делает, очевидно) динамическую отправку через функцию полиморфного виртуального метода.

-8
задан Edwin Duong 25 September 2015 в 00:33
поделиться