none
typedef CArray RRS feed

  • Frage

  • Hallo,

    ich habe lange Zeit MFC's CArray für Felder benutzt, stoße aber nun auf Grenzen und möchte eine eigene Array-Klasse schreiben "CMyArray", die ich um die benötigten Routinen erweitern kann.

    In meinem Projekt gibt es sehr viele CArrays. Nun möchte ich also erstmal nur das vorhandene CArray umbenennen in CMyArray. Wenn die neue Klasse dann fertig ist, möchte ich diese dann einfach in das Projekt einbinden.

    CMyArray<int> zahlen;

    Wie kriege ich das hin, dass es eigentlich ein "CArray<int> zahlen" ist?

    typedef CArray CMyArray;
    // bzw. da es ja ein template ist:
    typedef template<class T> CArray CMyArray<T>;

    So geht es ja leider nicht.

    Vielen Dank für Hilfe,
    Guido

    Donnerstag, 17. Oktober 2019 06:26

Antworten

  • Vielen Dank für die Antworten.

    Ich hab herausgefunden, wie ich CArray typedef-en kann:

    template <class T> 
    using CMyArray = CArray<T>;

    Gruß Guido

    • Als Antwort markiert Guido Franzke Donnerstag, 17. Oktober 2019 08:41
    Donnerstag, 17. Oktober 2019 08:41

Alle Antworten

  • Hallo Guido,

    um welche Grenzen geht es und welche Idee hast Du für deine Klasse diese zu umgehen?

    Sieht aus als wolltest Du umsetzen was in std::array bereits gemacht ist - spricht etwas gegen die Nutzung von std::array?


    - Gruß Florian

    Donnerstag, 17. Oktober 2019 06:37
  • Hallo Guido,

    um welche Grenzen geht es und welche Idee hast Du für deine Klasse diese zu umgehen?

    Sieht aus als wolltest Du umsetzen was in std::array bereits gemacht ist - spricht etwas gegen die Nutzung von std::array?


    - Gruß Florian

    Leider kann ich std:array nicht nutzen, da ich die ganzen Member-Funktionen von CArray in dem Projekt schon benutze, Add, RemoveAt, RemoveAll, Copy, SetSize, GetCount, etc. Ich möchte den ganzen Code nicht umschreiben. Ich möchte nur für mich bessere Funktionen in meine neue Klasse einbauen (eigenes Add, RemoveAt,...).

    Ich könnte eine Klasse von CArray ableiten, aber dann muss ich den ganzen Overhead neu implementieren (Konstruktor, Operatoren, etc).

    Ich könnte
    #define CMyArray CArray
    machen, aber das ist ja nicht so schön und birgt möglicherweise Gefahren.

    Gruß Guido

    Donnerstag, 17. Oktober 2019 06:48
  • Leider kann ich std:array nicht nutzen, da ich die ganzen Member-Funktionen von CArray in dem Projekt schon benutze, Add, RemoveAt, RemoveAll, Copy, SetSize, GetCount, etc.

    Keine Ahnung, ob es sich lohnt, das hängt wohl davon ab wo die Probleme liegen und was dort zu lösen ist. Betreffen die Probleme überhaupt alle Stellen an denen CArray genutzt wird, oder geht es eher um ein paar wenige Fälle?

    Ich möchte den ganzen Code nicht umschreiben. Ich möchte nur für mich bessere Funktionen in meine neue Klasse einbauen (eigenes Add, RemoveAt,...).

    Ich könnte eine Klasse von CArray ableiten, aber dann muss ich den ganzen Overhead neu implementieren (Konstruktor, Operatoren, etc).

    Klingt so als wäre Ableiten das vernünftigste. Die Implementierung beschränkt sich weitestgehend auf die Überladung oder Überschreibung für deine eigenen Methoden - für mich klingt das genannte nicht so, als müssten sämtliche Operatoren geändert werden. Die neue Klasse müsstest Du auch nur bei den Arrays nutzen, die von deinen geänderten Methoden profitieren. CArray durch CMyArray zu ersetzen, ist mit "Suchen und Ersetzen" schnell erledigt.


    - Gruß Florian

    Donnerstag, 17. Oktober 2019 07:20
  • Vielen Dank für die Antworten.

    Ich hab herausgefunden, wie ich CArray typedef-en kann:

    template <class T> 
    using CMyArray = CArray<T>;

    Gruß Guido

    • Als Antwort markiert Guido Franzke Donnerstag, 17. Oktober 2019 08:41
    Donnerstag, 17. Oktober 2019 08:41