Kann std::is_invocable in C++11 emuliert werden?

Lesezeit: 1 Minute

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

  • 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


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

1012610cookie-checkKann std::is_invocable in C++11 emuliert werden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy