_variant_t in vorhandenen std:any casten



  • Lerne ja hier viel dazu.
    Als letztes std::any

    Bisher habe ich in meinem Projekt einen std::variant<> verwendet und diesen nun mal durch std::any ersetzt.

    Mein Problem:

    Ich habe einen _variant_t desen Wert möchte ich nun in einen bereits vorhandenen std::any speichern.

    den konkreten Wert eines _variant_t erhalte ich wenn ich in in den entsprechenden typ caste.

    Ich kann nun von myany die typeinfo erfragen. Kann ich nun mit dieser typeinfo den wert azs myvt "rauscasten" (gibts das Wort 🙂 )

    _variant_t myvt{5.0};
    std::any myany{4.0}
    
    auto value1 = myany.type()(myvt ) // geht nicht
    auto value2 = decltype(myany.type())(myvt ) // geht nicht
    auto value3 = dynamic_cast<myany.type()>(myvt ) // geht nicht
    auto value4 = dynamic_cast<decltype(myany.type())>(myvt ) // geht auch nicht
    
    


  • Nein, denn type() geht ja erst zur Laufzeit, du schreibst aber Code, der zur Compilezeit funktionieren müsste. type ist nicht der "Typ", sondern ein std::type_info.

    Und casten von any in andere Typen geht mit std::any_cast.



  • Dafür gibt's std::visit:

    #include <variant>
    #include <any>
    #include <string>
    #include <iostream>
    
    void foo() {
        std::variant<int, bool, std::string> myvar{"meh"};
        std::any myany{4.0};
    
        visit(
            [&myany](auto&& value) {
                myany = value;
            },
            myvar);
    
        std::cout << std::any_cast<std::string>(myany) << "\n";
    }
    


  • Warum teilst Du denn nicht mal mit uns, was Dein Ziel ist (im großen Ganzen).


Anmelden zum Antworten