Implizite Konvertierung



  • #include <iostream>
    #include <vector>
    using namespace std;
    
    int main()
    {
        vector< int >    vi;
        vector< double > vd(vi.begin(), vi.end());
    
        vector< vector< int > >    vvi;
        vector< vector< double > > vvd(vvi.begin(), vvi.end());  // Fehler - C2664
    }
    

    Lässt sich ein sozusagen "doppelter" vector irgendwie implizit in einen anderen doppelten vector konvertieren?



  • daersc schrieb:

    Lässt sich ein sozusagen "doppelter" vector irgendwie implizit in einen anderen doppelten vector konvertieren?

    Implizite Konvertierung erreichst du indem du ne variable des einen Typs einfach der Variable des anderen Typs zuweist. Der Compiler wird dir die Antwort geben ob die implizite Konvertierung erlaubt ist 😉



  • ich dachte eher daran, ob ich einen Konvertierungsoperator außerhalb von klassendefinitionen erstellen kann



  • daersc schrieb:

    ich dachte eher daran, ob ich einen Konvertierungsoperator außerhalb von klassendefinitionen erstellen kann

    Nein. Siehe auch im entsprechenden Artikel, Abschnitt 3.22

    Was du suchst ist std::transform und einen entsprechenden Transformator:

    template <class OuputContainer>
    struct ContainerTransformator
    {
      template <class InputContainer>
      OutputContainer operator()(InputContainer const& input)
      {
        OutputContainer cont(input.begin(), input.end());
        return cont;
      }
    }
    
    // ...
    
    int main()
    {
        typedef vector<int> intvec;
        typedef vector<intvec> intvecvec;
        typedef vector<double> doublevec;
        typedef vector<doublevec> doublevecvec;
    
        intvec  vi;
        doublevec vd(vi.begin(), vi.end());
    
        intvecvec    vvi;
        doublevecvec vvd(vvi.size());
    
        std::transform(vvi.begin(), vvi.end(), vvd.begin(), 
            ContainerTransformator<doublevecvec::value_type>()
        );
    }
    

    Ohne Gewähr


Anmelden zum Antworten