Указатель на функцию с несколькими аргументами C ++ 11 std :: function: Templating GetProcAddress

Я пытаюсь вернуть экземпляр функции с адреса FARPROC, заданного другой функцией, которая вызывает GetProcAddress. Придумал интересную проблему. Вот функция:

template<class FT>
std::function<FT> to_function(FARPROC address) {
return address;
}

Позже я бы создал функцию без ввода без каких-либо проблем:

auto try1 = to_function<int()>(addr1);

Однако когда функция принимает данные, компилятор Visual C ++ 11 взрывается:

auto try2 = to_function<int(int)>(addr2);

Это по праву возвращает:

Ошибка C2197: ‘int (__stdcall *) (void)’: слишком много аргументов для вызова

Рассматриваемый тип эквивалентен FARPROC, который возвращается функцией GetProcAddress независимо от списка аргументов функции.

Мой вопрос, чтобы перейти к сути, как мне обойти эту проблему, приведя FARPROC к подходящему типу для std :: function, учитывая простой прототип функции to_function? Приветствия заранее.

2

Решение

Я бы посоветовал вам сначала привести ваш указатель, а затем обернуть его в std :: function:

template<Signature>
std::function<Signature> to_function(FARPROC f)
{
return std::function<Signature>(reinterpret_cast<Signature*>(f));
}

ИМХО было бы неплохо назвать такую ​​функцию cast_to_function, Его название должно звучать опасно.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]