Реализация отложенной загрузки библиотек на С++
Категория реферата: Рефераты по информатике, программированию
Теги реферата: виды шпаргалок, реферат мировой
Добавил(а) на сайт: Puzanov.
Предыдущая страница реферата | 3 4 5 6 7 8 9 10 11 12 13 | Следующая страница реферата
стратегия реакции на ошибку поиска функции в модуле;
тип ячейки глобальной таблицы указателей на импортируемые функции (CDynFunction), который будет использован при создании прокси.
Как известно, С++ не поддерживает шаблоны с переменным количеством параметров. В связи с этим придется использовать генерацию экземпляров шаблона при помощи макросов а-ля boost::preprocessor. Объяснять подробно здесь, как это работает, я не буду – это тема для отдельной статьи. Кроме того, все это удовольствие осложняется тем, что Visual C 6.0 не может возвращать из void функции тип void. Для обхода этой проблемы приходится создавать отдельные классы для «нормальных» типов и для void, а затем использовать специализацию шаблона по возвращаемому значению с последующим наследованием.
Рассмотрим реализацию, предлагаемую в библиотеке:
#define FUN_PROXY(n) DL_CAT(CFunProxy,n) #define FUN_PROXY_IMPL(n) DL_CAT(FUN_PROXY(n),Impl) #define DECLARE_FUN_PROXY(param_count) template <typename R> struct FUN_PROXY_IMPL(param_count) { template <class DynFunction, DL_REPEAT_N(param_count, typename P), class Policy> struct RetProxy { static R WINAPI ProxyFun(DL_REPEAT_PARAM_N(param_count, P, v)) { if (DynFunction::InitFunction()) return DynFunction::GetProxy()(DL_REPEAT_N(param_count, v)); return Policy::template FunctionTrait<DynFunction>::MakeReturn(); } }; }; template <> struct FUN_PROXY_IMPL(param_count) <void> { template <class DynFunction, DL_REPEAT_N(param_count, typename P), class Policy> struct RetProxy Рекомендуем скачать другие рефераты по теме: реферат великая, рецензия на дипломную работу образец. Предыдущая страница реферата | 3 4 5 6 7 8 9 10 11 12 13 | Следующая страница реферата Поделитесь этой записью или добавьте в закладкиКатегории: |