Dynamisch Mengen in C++



  • Folgende Zeile müßte mal wieder nach BCB übersetzt werden:

    if Key in [VK_BACK, VK_DELETE, VK_UP, VK_DOWN, 32..255] then
    

    Also, ist es möglich dynamische Mengen a la {VK_BACK, VK_DELETE, etc] in C++ zu nutzen?



  • Hallo

    Direkt läßt sich diese Syntax nicht in C++ umsetzen.
    std::set ist eine Möglichkeit um den Effekt zu erreichen.

    bis bald
    akari



  • Oder eben per Hand:

    if(Key == VK_BACK || Key == VK_DELETE || Key == VK_UP || Key == VK_DOWN || Key >=32 && Key <=255)
    {
      ...
    }
    


  • Was auch geht

    Set<char, 0, 255> Keys;
    
    Keys << VK_BACK << VK_DELETE << VK_UP << VK_DOWN;
    
    if ( Keys.Contains(Key) )
    {
      // ...
    }
    

    Sieht man öfters bei Mengenparametern von VCL-Funktionen.

    Nur, wie kriegt man den Bereich 32..255 da hinein, nur mit einer for-Schleife ?



  • Ups, das muss

    Set<BYTE, 0, 255>
    

    heißen.



  • nn schrieb:

    Nur, wie kriegt man den Bereich 32..255 da hinein, nur mit einer for-Schleife ?

    template <typename T, unsigned char Min, unsigned char Max>
        System::Set <T, Min, Max> includeRange (const Set <T, Min, Max>& theSet, T first, T last)
    {
        Set <T, Min, Max> retval = theSet;
        for (unsigned char i = (unsigned char) first; i != ((unsigned char) last) + 1; ++i)
            retval << (T) i;
        return retval;
    }
    template <typename T, unsigned char Min, unsigned char Max>
        System::Set <T, Min, Max> excludeRange (const Set <T, Min, Max>& theSet, T first, T last)
    {
        Set <T, Min, Max> retval = theSet;
        for (unsigned char i = (unsigned char) first; i != ((unsigned char) last) + 1; ++i)
            retval >> (T) i;
        return retval;
    }
    

Anmelden zum Antworten