Der Versuch, so etwas wie ...
template <class T>
struct Wrapper
{
template <class U>
void set(const U& u) { myT = u; }
template <class F>
void set(F f) { myT = f(); }
T myT;
};
Ich weiß, dass ich hier SFINAE verwenden muss, aber wie unterscheide ich einen Rückrufparameter von einem Wertparameter? Es ist sicher anzunehmen, dass ein Wert nicht als Rückruf verwendet werden kann.
Ich habe versucht , enable_if
mit is_function, result_of
, invoke_result
, is_invocable
, und andere, aber nichts davon richtig funktioniert. Ist es überhaupt möglich?
constexpr
wegen besserer Kompilierungszeiten SFINAE vorziehenJa, Sie können SFINAE mit Hilfe von
std::is_invocable
(seit C ++ 17) anwenden .LEBEN
quelle
Die Überladung, die eine Funktion als Argument annimmt, kann wie folgt definiert werden:
Demonstrativer Code:
Ausgabe:
quelle