gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:51:44 24 4
gpt4 key购买 nike

我正在尝试从另一个调用 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 返回的内容,与函数的参数列表无关。

直截了当,我的问题是,在给定简单函数原型(prototype) to_function 的情况下,我如何通过将 FARPROC 转换为适合 std::function 的类型来解决这个问题?提前干杯。

最佳答案

我建议您先转换指针,然后将其包装到 std::function 中:

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

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

关于c++ - 指向多参数 C++11 std::function 的函数指针:模板化 GetProcAddress,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13558875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com