Как я могу указать функцию с перегрузкой функции? - PullRequest
2 голосов
/ 04 марта 2020
#include <stdio.h>
#include <functional>

int foo(int x)
{
    return x;
}

int foo(int a, int b)
{
    return a + b;
}

int main()
{
    std::function<int(int)> guiFunc2 = foo;      //error : no suitable constructor exists to convert from "<unknown-type>" to "std::function<int(int)>"
    std::function<int(int, int)> guiFunc1 = foo; //error : no suitable constructor exists to convert from "<unknown-type>" to "std::function<int(int, int)>"

    return 0;
}

Я хочу сделать два указателя на функции с одинаковым именем, но этот код не работает.

Легко просто изменить имя функции, но я хотел бы знать, возможно ли сделать указатели функций с тем же именем.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 04 марта 2020

Приведите адрес к правильному типу перед присвоением:

std::function<int(int)> guiFunc2 = static_cast<int(*)(int)>(foo);
std::function<int(int, int)> guiFunc1 = static_cast<int(*)(int, int)>(foo);
0 голосов
/ 04 марта 2020

Для меня это более удобно:

    auto a = [](int x) { return foo(x); };
    auto b = [](int a, int b) { return foo(a, b); };

https://wandbox.org/permlink/yjc5EiEY97wgfN9b

Результат должен совпадать с другим ответом.

...