is_invocable-, is_invocable_r-, is_nothrow_invocable-, is_nothrow_invocable_r-Klassen
Diese Vorlagen bestimmen, ob ein Typ mit den angegebenen Argumenttypen aufgerufen werden kann. is_invocable_r
und is_nothrow_invocable_r
ermitteln Sie auch, ob das Ergebnis des Aufrufs in einen bestimmten Typ umsetzbar ist. is_nothrow_invocable
und is_nothrow_invocable_r
ermitteln Sie auch, ob der Aufruf keine Ausnahmen auslösen kann. In C++17 hinzugefügt.
Syntax
template <class Callable, class... Args>
struct is_invocable;
template <class Convertible, class Callable, class... Args>
struct is_invocable_r;
template <class Callable, class... Args>
struct is_nothrow_invocable;
template <class Convertible, class Callable, class... Args>
struct is_nothrow_invocable_r;
// Helper templates
template <class Callable, class... Args>
inline constexpr bool is_invocable_v =
std::is_invocable<Callable, Args...>::value;
template <class Convertible, class Callable, class... Args>
inline constexpr bool is_invocable_r_v =
std::is_invocable_r<Convertible, Callable, Args...>::value;
template <class Callable, class... Args>
inline constexpr bool is_nothrow_invocable_v =
std::is_nothrow_invocable<Callable, Args...>::value;
template <class Convertible, class Callable, class... Args>
inline constexpr bool is_nothrow_invocable_r_v =
std::is_nothrow_invocable_r<Convertible, Callable, Args...>::value;
Parameter
Aufrufbar
Der abzufragende, aufgerufene Typ.
args
Die zu abfragenden Argumenttypen.
Cabrio
Der Typ, in den das Ergebnis der Anruffähigen zu konvertierbar sein muss.
Hinweise
Das is_invocable
Typprädikat enthält "true", wenn der aufrufbare Typ "Aufrufbar " mithilfe der Argumente "Args" in einem nicht ausgewerteten Kontext aufgerufen werden kann.
Das is_invocable_r
Typprädikat enthält "true", wenn der aufrufbare Typ "Aufrufbar " mit den Argumenten "Args" in einem nicht ausgewerteten Kontext aufgerufen werden kann, um ein Ergebnistypkonvertierbar in "Convertible" zu erzeugen.
Das is_nothrow_invocable
Typprädikat enthält "true", wenn der aufrufbare Typ "Aufrufbar " mithilfe der Argumente "Args" in einem nicht ausgewerteten Kontext aufgerufen werden kann und dass ein solcher Aufruf bekannt ist, dass keine Ausnahme ausgelöst wird.
Das is_nothrow_invocable_r
Typprädikat enthält "true", wenn der aufrufbare Typ "Aufrufbar " mit den Argumenten "Args" in einem nicht ausgewerteten Kontext aufgerufen werden kann, um eine Ergebnistypkonvertierbar in "Cabrio" zu erzeugen, und dass ein solcher Aufruf bekannt ist, dass keine Ausnahme ausgelöst wird.
Jeder der Typen "Convertible", "Callable" und die Typen in den Parameter pack Args müssen ein vollständiger Typ, ein Array unbekannter Gebundenes oder möglicherweise cv-qualifizierter void
Typ sein. Andernfalls ist das Verhalten des Prädikats nicht definiert.
Beispiel
// std__type_traits__is_invocable.cpp
// compile using: cl /EHsc /std:c++17 std__type_traits__is_invocable.cpp
#include <type_traits>
auto test1(int) noexcept -> int (*)()
{
return nullptr;
}
auto test2(int) -> int (*)()
{
return nullptr;
}
int main()
{
static_assert( std::is_invocable<decltype(test1), short>::value );
static_assert( std::is_invocable_r<int(*)(), decltype(test1), int>::value );
static_assert( std::is_invocable_r<long(*)(), decltype(test1), int>::value ); // fails
static_assert( std::is_nothrow_invocable<decltype(test1), int>::value );
static_assert( std::is_nothrow_invocable<decltype(test2), int>::value ); // fails
static_assert( std::is_nothrow_invocable_r<int(*)(), decltype(test1), int>::value );
static_assert( std::is_nothrow_invocable_r<int(*)(), decltype(test2), int>::value ); // fails
}
Anforderungen
Header:<type_traits>
Namespace: std