0xd34df00d 31.05.2011 09:09 Azoth_primary

Добавлять говны в такой контейнер еще круче:
AwaitingPacketCallbacks_ [packet.to ()] [packet.id ()] = QPair<QPointer<QObject>, QByteArray> (obj, method);

c++
1. 0x2207 31.05.2011 09:11 epsilon

у Страуструпа написано, как поступать в таких случаях, когда надо выводить тип объекта по его конструктору.
тут по всем законам жанра нужно чтобы существовал некий qmake_pair, чтобы вместо QPair<QPointer<QObject>, QByteArray> (obj, method); писать qmake_pair(obj, method)

2. 0x2207 31.05.2011 09:14 epsilon

http://doc.qt.nokia.com/latest/qpair.htm...
qMakePair называется

3. 0xd34df00d0x2207 /1 31.05.2011 09:15 Azoth_primary

Да, но у obj тип QObject*, поэтому автоматический вывод не сработает, поэтому придется, например, оборачивать obj в QPointer<QObject> явно.
Впрочем, я сделал
typedef QPair<QPointer<QObject>, QByteArray> PacketCallback_t;
typedef QHash<QString, PacketCallback_t> PacketID2Callback_t;
QHash<QString, PacketID2Callback_t> AwaitingPacketCallbacks_;
и теперь просто делаю
... = PacketCallback_t (obj, method);

4. 0x22070xd34df00d /3 31.05.2011 09:20 epsilon

если бы у QPair было присваивание с приведением, как у бустовских кортежей например, то все-равно сработало бы, за исключением того, что ты поимел бы целый лишний временный объект в рантайме. непонятно зачем в данном случае. так что, я думаю, Онотоле одобрил бы эти typedef'ы.

5. 0xd34df00d0x2207 /4 31.05.2011 09:22 Azoth_primary

Что ты имеешь ввиду под присваиванием с приведением?

6. 0x22070xd34df00d /5 31.05.2011 09:24 epsilon

примерно это:

template<class U1, class U2> operator= (const pair<U1,U2>& other_pair ){
/*типа T1*/ first = other_pair.first;
/*типа T2*/ second = other_pair.second;
}

7. 0xd34df00d0x2207 /6 31.05.2011 09:25 Azoth_primary

А, ок, согласен.

Do you really want to delete ?