PDA

Visualizza la versione completa : [C++/Qt/Lua] Mappa per tipo generico


begin
12-07-2014, 16:18
Le QMap (http://qt-project.org/doc/qt-5/qmap.html) 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


QMap<QString (http://qt-project.org/doc/qt-5/qstring.html),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



#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:


QTable *tab=newQTable;


error: missing template arguments before '*' token

Potreste darmi qualche dritta?

Grazie in anticipo ;)

MItaly
12-07-2014, 16:39
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).

begin
12-07-2014, 16:56
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 :)

Loading