CameraPtr cameraFindOrInsert(std::string key, std::function <CameraPtr()> createFunc) { camsMutex.lock(); CameraPtr cam; auto camIt = cams.find(key); if (camIt != cams.end()) { cam = camIt->second; } else { cam = createFunc(); cams.insert({key, cam}); } camsMutex.unlock(); return cam; }