Почему я не могу передать указатель функции в качестве временного параметра на карту? - PullRequest
0 голосов
/ 07 октября 2018

В настоящее время я работаю над программой и хочу передать указатель функции на карту для пользовательского компаратора.В следующем минимальном, проверяемом примере, однако, это приводит к ошибкам:

#include <iostream>
#include <map>

struct CustomKey{
    unsigned a;
};

bool compareCustom(const CustomKey &a, const CustomKey &b){
    return a.a < b.a;
}

typedef decltype(compareCustom) CustomComparator;

int main(){
    std::map<CustomKey, unsigned, CustomComparator> customMap(&compareCustom);
    return 0;
}

Компиляция приведенного выше кода с использованием GCC или Clang приводит к множеству неинформативных ошибок шаблона, полностью сосредоточенных вокруг внутренней реализации std::map. Этот вопрос , по-видимому, говорит о том, что передача типа указателя на функцию совершенно допустима.В чем проблема с моим кодом?

1 Ответ

0 голосов
/ 07 октября 2018

Передача указателя на функцию действительна, но передача функции - нет.

typedef decltype(compareCustom) CustomComparator;

фактически делает CustomComparator типа bool(const CustomKey&, const CustomKey&), это сама функция, а не указатель.

Вы должны использовать:

typedef decltype(compareCustom) *CustomComparator;
...