Visualizzazione dei risultati da 1 a 2 su 2

Discussione: [c++]inline

  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]inline

    ciao.
    Ho questa classe di esempio:

    header:
    codice:
    // Geometric Tools, LLC
    // Copyright (c) 1998-2010
    // Distributed under the Boost Software License, Version 1.0.
    // http://www.boost.org/LICENSE_1_0.txt
    // http://www.geometrictools.com/Licens...ICENSE_1_0.txt
    //
    // File Version: 5.0.0 (2010/01/01)
    
    #ifndef WM5RTTI_H
    #define WM5RTTI_H
    
    #include "Wm5CoreLIB.h"
    
    namespace Wm5
    {
    
    class Rtti
    {
    public:
        // Construction and destruction.  The name must be unique among all
        // objects in the system.  In the Wm5 namespace, a class Foo should use
        // "Wm5.Foo".  If an application has another namespace, SomeName, then
        // the name should be "SomeName.Foo".
        Rtti (const char* name, const Rtti* baseType);
        ~Rtti ();
    
        inline const char* GetName () const;
        inline bool IsExactly (const Rtti& type) const;
        bool IsDerived (const Rtti& type) const;
    
    private:
        const char* mName;
        const Rtti* mBaseType;
    };
    
    #include "Wm5Rtti.inl"
    
    }
    
    //----------------------------------------------------------------------------
    #define WM5_DECLARE_RTTI \
    public: \
        static const Rtti TYPE; \
        \
        virtual const Rtti& GetRttiType () const \
        { \
            return TYPE; \
        }
    //----------------------------------------------------------------------------
    #define WM5_IMPLEMENT_RTTI(nsname, baseclassname, classname) \
        const Rtti classname::TYPE(#nsname"."#classname, &baseclassname::TYPE)
    //----------------------------------------------------------------------------
    
    #endif
    cpp:
    codice:
    // Geometric Tools, LLC
    // Copyright (c) 1998-2010
    // Distributed under the Boost Software License, Version 1.0.
    // http://www.boost.org/LICENSE_1_0.txt
    // http://www.geometrictools.com/Licens...ICENSE_1_0.txt
    //
    // File Version: 5.0.0 (2010/01/01)
    
    #include "Wm5CorePCH.h"
    #include "Wm5Rtti.h"
    using namespace Wm5;
    
    //----------------------------------------------------------------------------
    Rtti::Rtti (const char* name, const Rtti* baseType)
    {
        mName = name;
        mBaseType = baseType;
    }
    //----------------------------------------------------------------------------
    Rtti::~Rtti ()
    {
    }
    //----------------------------------------------------------------------------
    bool Rtti::IsDerived (const Rtti& type) const
    {
        const Rtti* search = this;
        while (search)
        {
            if (search == &type)
            {
                return true;
            }
            search = search->mBaseType;
        }
        return false;
    }
    //----------------------------------------------------------------------------
    e .inl
    codice:
    // Geometric Tools, LLC
    // Copyright (c) 1998-2010
    // Distributed under the Boost Software License, Version 1.0.
    // http://www.boost.org/LICENSE_1_0.txt
    // http://www.geometrictools.com/Licens...ICENSE_1_0.txt
    //
    // File Version: 5.0.0 (2010/01/01)
    
    //----------------------------------------------------------------------------
    inline const char* Rtti::GetName () const
    {
        return mName;
    }
    //----------------------------------------------------------------------------
    inline bool Rtti::IsExactly (const Rtti& type) const
    {
        return (&type == this);
    }
    //----------------------------------------------------------------------------
    perchè separa l'implementazione di alcuni membri in un file .inl con funzioni inline?
    quando è meglio usare le funzioni inline?
    grazie.

  2. #2

    Re: [c++]inline

    Originariamente inviato da giuseppe500
    perchè separa l'implementazione di alcuni membri in un file .inl con funzioni inline?
    Per mantenere distinta dichiarazione ed implementazione anche con le funzioni inline, che devono però essere incluse in ogni unità di compilazione per poter essere messe inline.
    quando è meglio usare le funzioni inline?
    In generale quando si tratta di piccole funzioni per cui l'overhead della chiamata a funzione sarebbe rilevante rispetto al tempo speso all'interno della funzione stessa. In generale, ad esempio, getters e setters conviene che siano sempre inline. Poi in realtà l'inlining è a discrezione del compilatore, che può fregarsene altamente della keyword inline.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.