Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    [C++/Qt/Lua] Mappa per tipo generico

    Le QMap sono una classe della libreria grafica Qt, e consistono in una classe container che immagazzina dati sotto forma di coppia key-value. Il loro limite consiste nel fatto che, una volta dichiarata la QMap, può contenere solo il tipo di dato specificato nella sua dichiarazione. Per esempio

    codice:
    QMap<QString,int> map;
    potrà contenere solamente value di tipo int.
    Ho provato a risolvere questo problema creando una classe template, in modo da cercare di creare qualcosa il più simile possibile alle table del Lua, in modo da poter immagazzinare dati di ogni tipo

    codice:
    #ifndef QTABLE_H
    #define QTABLE_H
    
    #include<QMap>
    
    template<classK, classV>
    class QTable {
        QMap<K, V> data;
        public:
        void insert(K key,V value) { 
            data.insert(key,value);
        }
    };
    
    #endif //QTABLE_H
    Ma quando cerco di creare un istanza di questa classe, il compilatore innalza questo errore:

    codice:
    QTable *tab=newQTable;
    codice:
    error: missing template arguments before '*' token
    Potreste darmi qualche dritta?

    Grazie in anticipo
    Ultima modifica di begin; 12-07-2014 a 15:22

  2. #2
    QMap è già template, la tua classe QTable non aiuta in alcun modo, perché rimangono le stesse limitazioni. Quello che vuoi tu probabilmente è avere come tipo di valore un qualcosa che possa contenere qualunque tipo; Qt a questo scopo consente di usare QVariant.

    In ogni caso, normalmente in C++ si evita di usare i variant e si preferiscono tipi statici a meno che non sia effettivamente necessario il contrario, sia per questioni di prestazioni che di correttezza del programma (se per sbaglio si inserisce il tipo sbagliato il compilatore ti avvisa a compile time).
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Quello che vuoi tu probabilmente è avere come tipo di valore un qualcosa che possa contenere qualunque tipo; Qt a questo scopo consente di usare QVariant.
    Si è esattamente quello che voglio

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.