Chciałbym utworzyć mapę z kluczami będącymi nazwą funkcji jako ciągiem znaków i wartością będącą samą funkcją. Tak coś takiego ...C++ map funkcji cmath
#include <cmath>
#include <functional>
#include <map>
#include <string>
typedef std::function<double(double)> mathFunc;
int main() {
std::map< std::string, mathFunc > funcMap;
funcMap.insert(std::make_pair("sqrt", std::sqrt));
double sqrt2 = (funcMap.at("sqrt"))(2.0);
return 0;
}
będzie użyty do wywołania funkcji sqrt na pewnej wartości wejściowej. Oczywiście możesz dodać do mapy inne funkcje, takie jak sin, cos, tan, acos itp., I po prostu wywołać je za pomocą jakiegoś ciągu znaków. Mój problem polega na tym, aby to, co typ wartość powinna być na mapie, oba wskaźniki funkcyjne i std :: funkcja daje następujący błąd na linii std :: make_pair
error: no matching function for call to 'make_pair(const char [5], <unresolved overloaded function type>)'
Więc co powinno być w moim typie wartość dla zbudowany w funkcjach takich jak std :: sqrt?
Dzięki
Są przeciążone. W jaki sposób można określić, którego użyć? – chris
Na pewno mogę określić, że podpis powinien być w jakiś sposób podwójny (podwójny)? Nawet wykonanie std :: make_pair daje ten sam błąd. Rozumiem, że chodziło o 4 różne typy, od http://www.cplusplus.com/reference/cmath/sqrt/? –
Możesz rzucić tę funkcję. – chris