From c4f690edf4cc2e11f19370f80ddd7428aba0b536 Mon Sep 17 00:00:00 2001 From: Kitsune Ral Date: Tue, 30 May 2017 08:56:59 +0900 Subject: Connection: Room and User factories are std::functions now Instead of createUser() and createRoom() virtual functions, use std::function<> to store predefined lambdas that would create respective descendants from User and Room, respectively. No more need QuaternionConnection just for the sake of creating a QuaternionRoom. --- connection.cpp | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) (limited to 'connection.cpp') diff --git a/connection.cpp b/connection.cpp index 7920125d..2c9ee88a 100644 --- a/connection.cpp +++ b/connection.cpp @@ -238,7 +238,7 @@ User* Connection::user(const QString& userId) { if( d->userMap.contains(userId) ) return d->userMap.value(userId); - User* user = createUser(userId); + auto* user = createUser(this, userId); d->userMap.insert(userId, user); return user; } @@ -297,7 +297,7 @@ Room* Connection::provideRoom(const QString& id) return d->roomMap.value(id); // Not yet in the map, create a new one. - Room* room = createRoom(id); + auto* room = createRoom(this, id); if (room) { d->roomMap.insert( id, room ); @@ -309,15 +309,11 @@ Room* Connection::provideRoom(const QString& id) return room; } -User* Connection::createUser(const QString& userId) -{ - return new User(userId, this); -} +std::function Connection::createRoom = + [](Connection* c, const QString& id) { return new Room(c, id); }; -Room* Connection::createRoom(const QString& roomId) -{ - return new Room(this, roomId); -} +std::function Connection::createUser = + [](Connection* c, const QString& id) { return new User(id, c); }; QByteArray Connection::generateTxnId() { -- cgit v1.2.3