Funktionspointer in std::map<> speichern
-
Hallo,
template<typename T> const std::map<std::string, T(*)(const T& )> math_parser<T>::functions = { {std::string("SQRT"), (T(*)(const T& ))&std::sqrt<T>} };Ich caste den Pointer, weil es mehrere Überladungen der Funktion gibt und gebe explizit den Template-Parameter an. Warum will das dann immer noch nicht kompilieren und wie mache ich es richtig?
Wenn ich einen komplexen Mathe-Parser instantziiere, fliegt mir das Programm um die Ohren:
/usr/include/c++/6.2.1/complex:872: error: invalid operands to binary expression ('std::complex<long double>' and 'std::complex<long double>') return complex<_Tp>(__t, __y < _Tp() ? -__t : __t); ~~~ ^ ~~~~~
-
Funktioniert ohne Templateargument (ist schließlich kein Funktionstemplate) und sogar ohne cast prima: https://ideone.com/fdE2tO.
Vielleicht wäre std::function die bessere wahl? Das gibt dir die Möglichkeit, das ganze mit Methoden und auch Lambdaausdrücken zu machen. Kommt aber darauf an, was du damit vorhast.
-
Nein, ich mein eher sowas.
Als Template-Ausdruck funktioniert das nicht, sobald man versucht math_parser::evaluate() aufzurufen.
-
Die Templateargumente weg und schon funktioniert's: http://ideone.com/ahHUkm
-
Ah, danke.