我试图从另一个调用GetProcAddress的函数给出的FARPROC地址返回一个函数实例。提出了一个有趣的问题。这是功能:
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返回的,无论函数的参数列表如何。
我的问题,为了达到这一点,我是如何通过在给定to_function的简单函数原型的情况下将FARPROC强制转换为std :: function的适当类型来解决这个问题?提前干杯。
答案 0 :(得分:3)
我建议你首先施放你的指针,然后将它包装成std :: function:
template<Signature>
std::function<Signature> to_function(FARPROC f)
{
return std::function<Signature>(reinterpret_cast<Signature*>(f));
}
恕我直言,命名这样一个函数cast_to_function
是个好主意。它的名字应该听起来很危险。