Это, вероятно, больше ответа, который вы искали, но вот:
RTTI не является "переносимым" означает, что если вы используете компилятор A для создания динамической библиотеки A и используете компилятор B для создания приложения B, которое связывается с A, то вы не можете использовать RTTI, поскольку реализации RTTI компилятора a и b различны. Виртуальные функции затрагиваются только потому, что механизм виртуальных функций также может быть несовместим с двоичными кодами.
Этот вопрос был очень важен в середине 90-х годов, но сейчас он устарел. Не потому, что теперь все компиляторы стали бинарно совместимыми друг с другом, а скорее наоборот: разработчики C++ теперь осознали, что библиотеки C++ должны поставляться в виде исходного кода, а не линкуемых библиотек. Для тех, кто рассматривает C++ как расширение C, это очень неудобно, но для более современных программистов, выросших в среде с открытым исходным кодом, вообще ничего особенного.
Что изменилось между серединой 90-х и сейчас, так это разное отношение к тому, что составляет ценную интеллектуальную собственность, а что нет. А именно: на самом деле в USPO зарегистрирован патент на «шаблоны выражений». Даже владелец такого понимает, что патент не имеет исковой силы.
Библиотеки заголовков и двоичных файлов в стиле C долгое время рассматривались как способ запутать ценный исходный код. Бизнес все больше и больше приходил к пониманию того, что запутывание было скорее саморазрушительным, чем защитным: существует очень мало кода, который соответствует статусу «ценной ИС». Большинство людей покупают библиотеки не из-за специальных IP-адресов, которые они содержат, а потому, что дешевле купить, чем создавать свои собственные. На самом деле: опыт применения ИС гораздо ценнее, чем сама ИС. Но если этот IP никому не интересен, потому что о нем не знают, то он мало что стоит.
Вот как работает открытый исходный код: интеллектуальная собственность распространяется бесплатно, а взамен эти дистрибьюторы получают плату за консультационные услуги при применении этой интеллектуальной собственности. Те, кто может понять это для себя выгодно – хорошо на них. Но это не норма. На самом деле происходит то, что разработчик понимает ИС и продает своему работодателю покупку продукта, который ее реализует. Да, целые «сообщества разработчиков» основаны на этой предпосылке.
Короче говоря: бинарная (и впоследствии RTTI) совместимость ушла в прошлое, как только началось движение за открытый исходный код, и одновременно библиотеки шаблонов C++ стали нормой. Библиотеки C++ давно стали "исходными дистрибутивами", такими как Perl, Python, JavaScript и т. д. Чтобы ваш компилятор C++ работал со всем исходным кодом, который вы компилируете с его помощью, убедитесь, что RTTI включен (включая все стандартные функции C++, такие как исключения) , и что все библиотеки C++, на которые вы ссылаетесь, также скомпилированы с теми же параметрами, которые вы использовали для компиляции своего приложения.
Я знаю один (и только один) компилятор, который не включает RTTI по умолчанию, и это потому, что есть другие устаревшие способы сделать то же самое. Чтобы прочитать об этом, возьмите экземпляр отличной работы Дона Бокса «Essential COM».
person
Lance Diduck
schedule
25.04.2010
export
на самом деле был бесполезным мерилом. RTTI является не более необязательным, чемint
. - person MSalters   schedule 26.04.2010