Что-то, о чем не упоминалось, состоит в том, что функции шаблонов могут выводить типы параметров.
template <typename T> void func(T t) { T make_another = t;
Можно утверждать, что предстоящий оператор «typeof» может исправить это, но даже он не может разделиться другие шаблоны:
template <typename T> void func(container<T> c)
или даже:
template <tempate <typename> class Container, typename T> void func(Container<T> ct)
Я также считаю, что предмет специализации недостаточно охвачен. Вот простой пример того, что макросы не могут сделать:
template <typename T> T min(T a, T B) { return a < b ? a : b; } template <> char* min(char* a, char* b) { if (strcmp(a, b) < 0) return a; else return b; }
Пространство слишком мало, чтобы перейти к специализации по типу, но то, что вы можете с ним сделать, насколько мне известно, - это ум -blowing.
С помощью openCallBack вы можете определить свою функцию, которая будет динамически изменять состояние пунктов контекстного меню или выполнять любые другие действия, когда меню открывается по щелчку, перед его отображением:
function ContextMenu(contextContainerID, menuItemClickCallback, options)
{
// skipped
this.contextMenuContainer.click(function(e){
// skipped
if (options != null && typeof options !== "undefined" )
{
if (typeof options.openCallBack !== "undefined")
{
options.openCallBack(self);
}
}
// skipped
contextMenu.show();
return false;
});
// skipped
}