错误:无法解析对重载函数的引用;你是想打电话给它吗?

Sat*_*h D 5 c++ c++11 c++17

下面的代码:

#include <cstddef>
using std::size_t;

int hOccupy(int* numB, const void* f, int bS, size_t dyn);

template <class T>
inline int hOccupy(int* numB, T f, int bS, size_t dyn) {
    return hOccupy(numB, reinterpret_cast<const void*>(f), bS, dyn);
}

int main(int argc, char *argv[]) {
    decltype(&hOccupy) f = &hOccupy;
}
Run Code Online (Sandbox Code Playgroud)

给出错误:

 error: reference to overloaded function could not be resolved; did you mean to call it?
Run Code Online (Sandbox Code Playgroud)

谁能建议这里出了什么问题以及如何克服它?

Nat*_*ica 5

hOccupy是一个重载函数。这意味着为了获取它的地址,您需要指定您想要哪个重载的地址。例如,如果您希望指针指向

hError_t hOccupy(int* numB, const void* f, int bS, size_t dyn);
Run Code Online (Sandbox Code Playgroud)

那么你可以使用

auto f = static_cast<hError_t (*)(int, const void*, int, size_t)>(&hOccupy);
Run Code Online (Sandbox Code Playgroud)

如果你想f引用重载集,那么你可以使用 lambda 来实现,例如

auto f = [](int* numB, auto f, int bS, size_t dyn){ return hOccupy(numB, f, bS, dyn); };
Run Code Online (Sandbox Code Playgroud)