ich viele Objekte definiert haben, und für einige von ihnen, definiert ich eine Funktion:Prüft, ob ein nicht Elementfunktion vorhanden ist (SFINAE)
template <typename Ratio>
auto print(const T &t, bool a= true, bool b= true)
{
std::stringstream ss;
// ... do stuff ...
return ss.str();
}
wobei T die Art von einem der Objekte, für die Druck ist definiert. Das Verhältnis wird innerhalb der Funktion verwendet.
Meine Frage ist: Gibt es eine Möglichkeit für einen Typ T zu finden, ob diese Funktion existiert?
Für andere verwendet, habe ich bereits Vorlagen und SFINAE verwendet, um festzustellen, ob eine Klassenmitgliedsmethode existiert. Aber für mein Problem hier, ich kann die Lösung nicht finden ... Jeder?
Danke, Ben
PS: Beispiel SFINAE in meinem Code verwenden, wobei i ist gegeben, wenn ein Klassenmitglied Verfahren zum Nachweis erforderlich.
static T none() { ... }
/**
* SFINAE for checking id none method exists
*/
template <class T>
static auto hasNoneMethod(int)
-> std::integral_constant<bool, std::is_same<T, decltype(T::none())>::value>;
template <class>
static auto hasNoneMethod(...) -> std::false_type;
/**
* Type-Function
*/
template <typename T>
struct HasNoneMethod: decltype(detail::hasNoneMethod<T>(0)) {
};
Vorlage du meinst T? –
Sie haben ein 'typename Ratio', aber verwenden Sie' T' ... Sind sie der gleiche Parameter? Hast du irgendwas probiert? – Holt
Was meinst du damit existiert? So wie es aussieht (vorausgesetzt, Sie korrigieren Ihren Template-Parameternamen typo), wird es automatisch für jeden Typ erzeugt, mit dem Sie es verwenden möchten, da es keine SFINAE-Constraints hat. – Smeeheey