ошибка: ссылка на перегруженную функцию не может быть разрешена; ты хотел это назвать? - PullRequest
2 голосов
/ 06 февраля 2020

Код ниже:

#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;
}

выдает ошибку:

 error: reference to overloaded function could not be resolved; did you mean to call it?

Может кто-нибудь подсказать, что здесь не так и как ее преодолеть?

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

hOccupy - перегруженная функция. Это означает, что для того, чтобы получить его адрес, вам нужно указать, какую перегрузку вы хотите адрес. Например, если вы хотите, чтобы указатель указывал на

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

, вы можете использовать

auto f = static_cast<hError_t (*)(int, const void*, int, size_t)>(&hOccupy);

Если вы хотите, чтобы f ссылался на набор перегрузки, тогда Вы можете сделать это, используя лямбда, как

auto f = [](int* numB, auto f, int bS, size_t dyn){ return hOccupy(numB, f, bS, dyn); };
1 голос
/ 06 февраля 2020

Чтобы дополнить ответ , предоставленный NathanOliver , если вместо этого вам нужен указатель на специфицированный c экземпляр вашей перегрузки шаблона, вам необходимо указать тип (T) в вашем коде.

Например:

decltype(&hOccupy<int*>) f = &hOccupy;

Без указания типа ваш оператор decltype не сформирован.

...