Ich würde gerne std::is_invocable verwenden, aber wir verwenden den c++11-Standard, während is_invocable nur von c++17 verfügbar ist.
Gibt es eine Möglichkeit, die Funktionalität mit c++ 11 zu emulieren?
Danke
Ich würde gerne std::is_invocable verwenden, aber wir verwenden den c++11-Standard, während is_invocable nur von c++17 verfügbar ist.
Gibt es eine Möglichkeit, die Funktionalität mit c++ 11 zu emulieren?
Danke
Sie können diese Implementierung ausprobieren 🙂 Entnommen aus Boost-C++-Bibliotheken. Ich habe es mit VS2017 mit Standard C++14 getestet.
template <typename F, typename... Args>
struct is_invocable :
std::is_constructible<
std::function<void(Args ...)>,
std::reference_wrapper<typename std::remove_reference<F>::type>
>
{
};
template <typename R, typename F, typename... Args>
struct is_invocable_r :
std::is_constructible<
std::function<R(Args ...)>,
std::reference_wrapper<typename std::remove_reference<F>::type>
>
{
};
Zur Implementierung ist die Bibliothek erforderlich LWG 2132 obwohl.
– cpplerner
5. Juli 2018 um 11:15 Uhr
Es scheint ein Äquivalent in der zu geben gcc-Implementierung.
– Ron
5. Juli 2018 um 9:44 Uhr
Hast du das versucht
std::__is_invocable
?– Ron
5. Juli 2018 um 9:49 Uhr
Hast du die Boost-Bibliothek überprüft, boost.org/doc/libs/master/libs/hof/doc/html/include/boost/hof/…
– Prost und hth. – Alf
5. Juli 2018 um 9:50 Uhr
@Ron —
std:__is_invocable
ist weder Teil von C++11 noch einer anderen Version des C++-Standards. Es sieht aus wie ein internes Detail für eine bestimmte Bibliotheksimplementierung.– Peter Becker
5. Juli 2018 um 11:49 Uhr
@PeteBecker Ich verstehe. Der Kommentar paar Zeilen zurück schlägt vor, dass es eine Art Äquivalent für C ++ 11 ist. Oder so war mein Verständnis.
– Ron
5. Juli 2018 um 12:20 Uhr