| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 | #ifndef QLOW_UTIL_H#define QLOW_UTIL_H#include <vector>#include <memory>#include <sstream>#include <typeinfo>namespace qlow{        template<typename T>    using OwningList = std::vector<std::unique_ptr<T>>;                /// I don't like this, but I lack better ideas at the moment.    /// TODO: find better solution    /*!    * \brief tries to cast a unique_ptr and throws if it fails    */    template<typename T, typename U>    std::unique_ptr<T> unique_dynamic_cast(std::unique_ptr<U>&& p)    {        U* released = p.release();        if (T* casted = dynamic_cast<T*>(released); casted)            return std::unique_ptr<T> (casted);        else {            delete released;            //throw "failed unique dynamic cast";            throw std::string("invalid unique_dynamic_cast from ") + typeid(p.get()).name() + " to " + typeid(T).name();        }    }        namespace util    {        inline std::string toString(const void* a)        {            std::ostringstream o;            o << a;            return o.str();        }    }}#endif // QLOW_UTIL_H
 |