den folgenden Code vor:Rückgabetyp eines Anruf nur mit Angaben zu Art und nicht auf Objekte
template <class F, class... Args>
void function(F&& f, Args&&... args)
{
using type1 = decltype(std::forward<F>(f)(std::forwards<Args>(args)...));
using type2 = decltype(/*equivalent expression but only using types */);
}
Gibt es eine Möglichkeit type2
die gleichen wie type1
in allen Fällen zu machen, aber nur die Typen in der Verwendung decltype
Ausdruck, oder mit anderen Worten nur mit F
und Args
und nicht f
und args
?
Ich bin mir nicht sicher, ob ich die Frage verstehe. Fragen Sie nach ['std :: declval'] (http://en.cppreference.com/w/cpp/utility/declval)? –
Warum willst du 'f' und' args' nicht verwenden? Nur neugierig. – Rakete1111
@ Rakete1111: das ist kein x/y Problem, es ist nur, dass in den letzten paar Jahren, während ich Template metaprogramming code geschrieben habe, habe ich mir diese Frage mehrmals gestellt, und nicht sicher, was die Antwort war (denn immer noch nach 6 Jahren mit ihnen spielen, nicht sicher, all die subtilties für universelle Referenzen und std :: forward zu verstehen. – Vincent