函数指针指向多个参数C ++ 11 std :: function:模板化GetProcAddress

时间:2012-11-26 04:56:35

标签: c++ function templates c++11 getprocaddress

我试图从另一个调用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的适当类型来解决这个问题?提前干杯。

1 个答案:

答案 0 :(得分:3)

我建议你首先施放你的指针,然后将它包装成std :: function:

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

恕我直言,命名这样一个函数cast_to_function是个好主意。它的名字应该听起来很危险。