/***************************************************************************
- * Copyright (C) 2005-2016 by the Quassel Project *
+ * Copyright (C) 2005-2019 by the Quassel Project *
* devel@quassel-irc.org *
* *
* This program is free software; you can redistribute it and/or modify *
#pragma once
+#include "common-export.h"
+
#include <memory>
#include <type_traits>
* QObject should always be deleted by calling deleteLater() on them, so the event loop can
* perform necessary cleanups.
*/
-struct DeferredDeleter {
+struct DeferredDeleter
+{
/// Deletes the given QObject
- void operator()(QObject *object) const {
+ void operator()(QObject* object) const
+ {
if (object)
object->deleteLater();
}
};
-} // detail
+} // namespace detail
/**
* Unique pointer for QObjects with deferred deletion
template<typename T>
using DeferredUniquePtr = std::unique_ptr<T, detail::DeferredDeleter>;
-
/**
* Helper function for creating a DeferredUniquePtr
*
* @param[in] args Constructor arguments
* @returns A DeferredUniquePtr holding a new instance of T
*/
-template<typename T, typename ...Args>
+template<typename T, typename... Args>
DeferredUniquePtr<T> makeDeferredUnique(Args... args)
{
static_assert(std::is_base_of<QObject, T>::value, "Type must inherit from QObject");
return DeferredUniquePtr<T>(new T(std::forward<Args>(args)...));
}
-
/**
* Shared pointer for QObjects with deferred deletion
*
template<typename T>
using DeferredSharedPtr = std::shared_ptr<T>;
-
/**
* Helper function for creating a DeferredSharedPtr
*
* @param[in] args Constructor arguments
* @returns A DeferredSharedPtr holding a new instance of T
*/
-template<typename T, typename ...Args>
+template<typename T, typename... Args>
DeferredSharedPtr<T> makeDeferredShared(Args... args)
{
static_assert(std::is_base_of<QObject, T>::value, "Type must inherit from QObject");