Метод объекта карты с использованием std :: function - PullRequest
0 голосов
/ 26 февраля 2020

Я хочу отобразить метод объекта Math в строку в следующем коде

#include <functional>
#include <iostream>
#include <map>
#include <string>

struct Math
{
    double foo(double& x) { return 100.0; };
    double bar(double& x) { return 400.0; };
};

int main()
{
    Math m;
    std::map<std::string, std::function<double(double&)>> nn =
    {
        {"sin", [&m](double& x) {m.foo(x);}}
    };
}

Приведенный выше код выдает две ошибки: первая -

'initializing': cannot convert from 'initializer list' to 'std::map<std::string,std::function<double (double &)>,std::less<_Kty>,std::allocator<std::pair<const _Kty,_Ty>>>'
        with
        [
            _Kty=std::string,
            _Ty=std::function<double (double &)>
        ]

, а вторая ошибка:

no instance of constructor "std::map<_Kty, _Ty, _Pr, _Alloc>::map [with _Kty=std::string, _Ty=std::function<double (double &)>, _Pr=std::less<std::string>, _Alloc=std::allocator<std::pair<const std::string, std::function<double (double &)>>>]" matches the argument list

Пожалуйста, помогите, спасибо

1 Ответ

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

Ваш лямбда-тип несовместим, потому что он возвращает void

Он должен возвращать double.

{"sin", [&m](double& x) { return m.foo(x); }}
                          ^^^^^^
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...