Помогите наметапрограммировать или генерация parameter pack
От: Voivoid Россия  
Дата: 30.08.13 08:27
Оценка:
Доброго времени суток!

Хочется написать кроссплатформенную обертку над LoadLibrary/GetProcAddress ( кстати странно, что например в boost'е её нет ) примерно со следующим интерфейсом:

auto lib = LoadLib( "cool.dll" );
auto func = lib.GetFunc<int(int, int)>( "cool_func" );

int res = func( 1, 42 );

Хочется чтобы func был функциональным объектом, т.е. реализовывал operator() с аргументами указанными в GetFunc. Почему не просто указателем? Хочется внутри еще подсчет ссылок для проверки отсутствия живых функций на момент выгрузки библиотеки, но это к вопросу не относится

Подумалось, что func реализовать можно как-то так. Но вот как бы сгенерировать parameter pack? Да и возможно ли это сделать? И если нет, то есть ли другие пути решение этой проблемы?

#include "boost/type_traits/function_traits.hpp"

template <typename T, typename... Args>
struct func_helper {
    func_helper( T* a_func ) : i_func( a_func ) {}

    typename boost::function_traits<T>::result_type operator()( Args... args ) {
        return i_func( args... );
    }

    T* i_func;
};

template <typename T>
class func : func_helper<T, /* HELP ME */> {
public:
    func( T* a_func ) : func_helper( a_func ) {
    }
};
generate parameter pack variadic template
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.