Verbesserungsvorschläge für generischen Code mit Containern



  • Ich habe einen einfachen Wrapper für GUI Fenster geschrieben. Hierbei möchte ich Comboboxen füllen. Die Comboboxen entsprechen in den meisten Fällen irgentwelche Container mit irgentwelchen Daten. Also habe ich eine generische Funktion der folgenden Form geschrieben:

    #include <iostream>
    #include <functional>
    #include <algorithm>
    
    template<typename T>
    concept CharType = std::is_same<T, char>::value || std::is_same<T, wchar_t>::value;
    
    class Person
    {
    public:
        std::string mName;
        unsigned int mAge;
    
    
    public:
        Person(const std::string& Name, unsigned int Age) :
            mName(Name),
            mAge(Age)
        {}
    };
    
    
    template<CharType T>
    class Window
    {
    public:
        template<std::forward_iterator _InIt, typename _Fn>
        void Foo(_InIt _First, _InIt _Last, _Fn fn)
        {
            std::cout << "Resetting combo box\n";   // Debug Ausgabe     
            for (_InIt Cur = _First; Cur != _Last; ++Cur)
            {
                const std::basic_string<T> Entry = fn(*Cur);
    
                std::cout << "Adding new combo box entry: " << Entry << "\n";   // Debug Ausgabe. Wird nur für char funktionieren    
            }
            std::cout << "Selecting first element\n";   // Debug Ausgabe
        }
    };
    
    
    int main()
    {
        const std::vector<Person> L{ { "Nils", 11} , {"Eva", 13} };
        Window<char> W;         // Ist ok so 
    
        W.Foo(std::begin(L), std::end(L), [](const Person& P) {
            return P.mName;
            });
        return 0;
    }
    

    Habt ihr hierzu Verbesserungsvorschläge?

    Wäre es hier ggf. sinnvoll den Code von std::for_each zu adaptieren? In meinem Fall (Visual Studio) also die Funktionen _Adl_verify_range() und _Get_unwrapped() zu nutzen?


Anmelden zum Antworten