Я пытаюсь вернуть экземпляр функции с адреса 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? Приветствия заранее.
Я бы посоветовал вам сначала привести ваш указатель, а затем обернуть его в std :: function:
template<Signature>
std::function<Signature> to_function(FARPROC f)
{
return std::function<Signature>(reinterpret_cast<Signature*>(f));
}
ИМХО было бы неплохо назвать такую функцию cast_to_function
, Его название должно звучать опасно.
Других решений пока нет …