Ich versuche, herauszufinden, wie ich eine Template-Klasse zu machen, die wie folgt funktioniert:Wie können Sie eine Funktion als Template-Parameter übergeben, in der die Rückgabe der Funktion dem Template-Parameter entspricht?
template<typename T, typename Fn>
class Point
{
public:
T x;
T y;
void pt(const std::string& x_str, const std::string& y_str)
{
x = Fn(x_str);
y = Fn(y_str);
}
.... more Point stuff ....
};
typedef Point<float, std::stof> FPoint;
typedef Point<int, std::stoi> IPoint;
.....
und dann, wenn ich einen String gelesen - sagen: „100.25,200.25“, konnte ich gespalten auf „“ (was ich aus eigentlich dachte, wie zu tun, und dann sagen, stellen Sie diesen Punkt:
FPoint a;
a.pt("100.25","200.25")
bisher habe ich versucht, die Definition direkt wie ich oben habe, habe ich versucht:
template<typename T, T (C*)(const std::string&)>
.....
und
template<typename T, T Fn(const std::string&)>
......
und dann tun: typedef Punkt FloatPoint;
und ich bekomme verschiedene Fehler wie kann nicht von 'overloaded-Funktion' in 'float (__cdecl *) konvertieren (const std :: string &)' oder 'std :: stof' ist kein gültiges Template-Typ-Argument für Parameter 'convert_func' abhängig davon, wie ich den Parameter definieren möchte. Irgendwelche Hinweise - nichts, was ich gegoogelt habe, schien mir zu helfen.
Danke!
Yup - das war es .... offenbar, weil es auf Vorlagen ist, ich habe alle Parmeters verwenden, auch wenn std :: stof als std :: stof (const std :: string &, size_t definiert ist * = 0) – tenspd137