У меня есть приложение, которое работает так же к примеру Eran, кроме я присоединяю событие щелчка к телу, когда я открываю меню... Отчасти как это:
$('#menucontainer').click(function(event) {
$('html').one('click',function() {
// Hide the menus
});
event.stopPropagation();
});
[еще 114] информация о jQuery one()
функция
Хотя это больше о «как», чем о «почему», вас может заинтересовать библиотека (еще не) Boost.Extension , а также блог автора по этой теме.
Что касается части «почему», мои 2 (канадских) цента: это зависит от аудитории (авторов плагинов) и разнообразия интерфейса между вашим приложением и его плагины:
Однажды я сделал на C ++ интерфейс плагина для разработанной мной системы, и это была большая ошибка. Возможно, но совсем не практично. Сегодня я всегда делаю интерфейс исключительно на C и настолько простым, насколько могу. Преимущества такого выбора действительно значительны. И если вашим разработчикам плагинов нужен C ++ API, вы можете просто написать оболочку C ++, которая вызывает интерфейс C.
В качестве дополнительного бонуса, если разработчикам плагинов нужен API на любом другом языке, C API всегда будет легче создавать привязки для.
В общем, разумно написать интерфейсы для некоторого стандарта интерфейса, на который можно положиться. Вот почему практически каждая ОС предоставляет такой интерфейс. В большинстве Unix компиляторы C используют то же соглашение, что и ОС, поэтому они называют это соглашением о вызовах C. В Windows для этой цели есть stdcall.
Если вы попытаетесь использовать какой-то внутренний интерфейс вызова компилятора, например, C ++, то вы станете жертвой всех упомянутых вами проблем. Даже обновления компилятора могут вас напугать.
Думаю, вы здесь отвечаете на свой вопрос. Ничто не мешает вам реализовать простой интерфейс плагина C и позволить разработчикам плагинов реализовать свой плагин на C ++. Просто попробуйте и извлеките уроки из ошибок, допущенных API подключаемого модуля Netscape ...