Ich versuche, die Rückgabe- und Argumenttypen einer Elementfunktion zu extrahieren, ohne mit const
und volatile
Überlastungen kümmern zu müssen, aber es scheint mir, dass ::std::remove_cv<>
nicht mit Funktionstypen arbeiten:sollte :: std :: remove_cv <> auf Funktionstypen arbeiten?
template <typename>
struct signature
{
};
template <typename R, typename ...A>
struct signature<R(A...)>
{
};
template <typename C, typename F>
constexpr auto extract_function_type(F C::* const) noexcept
{
return signature<::std::remove_cv_t<F>>();
}
template <typename F>
constexpr auto extract_signature(F const&) noexcept ->
decltype(&F::operator(), extract_function_type(&F::operator()))
{
return extract_function_type(&F::operator());
}
Ahhh, dachte ich, so viel, wie etwa ref qualifizierte Funktionstypen, muss ich diese natürlich auch strippen? – user1095108
@ user1095108 ja. Es gibt eine Menge Standard. Ich habe das Nötigste gepostet. – Simple
Ok, ok, wenn es eine elegantere Lösung ohne das Boilerplate gibt, fügen Sie bitte Ihre Antwort hinzu. – user1095108