lokitypeinfo.h

来自「C++封装的视频采集代码」· C头文件 代码 · 共 109 行

H
109
字号
////////////////////////////////////////////////////////////////////////////////// The Loki Library// Copyright (c) 2001 by Andrei Alexandrescu// This code accompanies the book:// Alexandrescu, Andrei. "Modern C++ Design: Generic Programming and Design //     Patterns Applied". Copyright (c) 2001. Addison-Wesley.// Permission to use, copy, modify, distribute and sell this software for any //     purpose is hereby granted without fee, provided that the above copyright //     notice appear in all copies and that both that copyright notice and this //     permission notice appear in supporting documentation.// The author or Addison-Wesley Longman make no representations about the //     suitability of this software for any purpose. It is provided "as is" //     without express or implied warranty.////////////////////////////////////////////////////////////////////////////////// Last update: August 9, 2002#ifndef LOKITYPEINFO_INC_#define LOKITYPEINFO_INC_#include <typeinfo>#include "Utils/assert.h"#include "Typelist.h"namespace Loki{////////////////////////////////////////////////////////////////////////////////// class TypeInfo// Purpose: offer a first-class, comparable wrapper over std::type_info////////////////////////////////////////////////////////////////////////////////    class TypeInfo    {    public:        // Constructors        TypeInfo(); // needed for containers        TypeInfo(const std::type_info&); // non-explicit        // Access for the wrapped std::type_info        const std::type_info& Get() const;        // Compatibility functions        bool before(const TypeInfo& rhs) const;        const char* name() const;    private:        const std::type_info* pInfo_;    };    // Implementation        inline TypeInfo::TypeInfo()    {        class Nil {};        pInfo_ = &typeid(Nil);        ASSERT(pInfo_);    }        inline TypeInfo::TypeInfo(const std::type_info& ti)    : pInfo_(&ti)    { ASSERT(pInfo_); }        inline bool TypeInfo::before(const TypeInfo& rhs) const    {        ASSERT(pInfo_);        return pInfo_->before(*rhs.pInfo_);    }    inline const std::type_info& TypeInfo::Get() const    {        ASSERT(pInfo_);        return *pInfo_;    }        inline const char* TypeInfo::name() const    {        ASSERT(pInfo_);        return pInfo_->name();    }// Comparison operators        inline bool operator==(const TypeInfo& lhs, const TypeInfo& rhs)    { return lhs.Get() == rhs.Get(); }    inline bool operator<(const TypeInfo& lhs, const TypeInfo& rhs)    { return lhs.before(rhs); }    inline bool operator!=(const TypeInfo& lhs, const TypeInfo& rhs)    { return !(lhs == rhs); }            inline bool operator>(const TypeInfo& lhs, const TypeInfo& rhs)    { return rhs < lhs; }        inline bool operator<=(const TypeInfo& lhs, const TypeInfo& rhs)    { return !(lhs > rhs); }         inline bool operator>=(const TypeInfo& lhs, const TypeInfo& rhs)    { return !(lhs < rhs); }}////////////////////////////////////////////////////////////////////////////////// Change log:// June 20, 2001: ported by Nick Thurn to gcc 2.95.3. Kudos, Nick!!!// July 16, 2002: Ported by Terje Sletteb� and Pavel Vozenilek to BCC 5.6////////////////////////////////////////////////////////////////////////////////#endif // LOKITYPEINFO_INC_

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?