Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826

    [c++]usare smartpointer in sua classe

    ciao.
    parto da un esempio:
    codice:
    #pragma once
    #include <vector>
    #include <string>
    #include "wm4matrix4.h"
    #include "BaseObject.h"
    
    class CNodeBase : public CBaseObject
    {
    public:
    	CNodeBase(void);
    	virtual ~CNodeBase(void);
    	virtual void Remove(const CNodeBase& pNode){};
    	virtual void Insert(CNodeBase* pNode){};
    	virtual CNodeBase* GetAt(int pos){return NULL;};
    
    
    	virtual void SetParent(CNodeBase* pNode){};
    
    
    	virtual Wm4::Matrix4f* GetmatrixT(){return NULL;};
    	virtual void SetMatrixT(Wm4::Matrix4f* pMatrix){};
    	virtual void SetMatrixT(double pMatrix[16]){};
    	std::string m_strName;
    };
    namespace Wm4
    {
    	typedef Pointer<CNodeBase> CNodeBasePtr;
    }
    vorrei inserire come parametro di SetParent (CNodeBase* pNode){}; uno smartpointer di tipo CNodeBasePtr , solo che a quel punto la visibilità non c'è per lo smart pointer che è dichiarato piiu' in basso e se lo metto prima non ha senso perchè non è stata dichiarata la classe!


    come posso fare?


    grazie.

  2. #2
    Ti basta una normale forward declaration:
    codice:
    #pragma once
    #include <vector>
    #include <string>
    #include "wm4matrix4.h"
    #include "BaseObject.h"
    
    // Forward declaration
    class CNodeBase;
    
    namespace Wm4
    {
            // Ora il typedef
    	typedef Pointer<CNodeBase> CNodeBasePtr;
    }
    
    // Ora la dichiarazione vera e propria
    class CNodeBase : public CBaseObject
    {
    public:
    	CNodeBase(void);
    	virtual ~CNodeBase(void);
    	virtual void Remove(const CNodeBase& pNode){};
    	virtual void Insert(CNodeBase* pNode){};
    	virtual CNodeBase* GetAt(int pos){return NULL;};
    
    
    	virtual void SetParent(CNodeBase* pNode){};
    
    
    	virtual Wm4::Matrix4f* GetmatrixT(){return NULL;};
    	virtual void SetMatrixT(Wm4::Matrix4f* pMatrix){};
    	virtual void SetMatrixT(double pMatrix[16]){};
    	std::string m_strName;
    };
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Grazie MItaly.
    Adesso che conosco questa "tecnica" volevo chiedere un altra cosa inerente:
    Devo generare una serie di classi c++ a partire da uno schema xsd , da cui estraggo i metadata delle classi con som http://msdn.microsoft.com/en-us/libr...=vs.71%29.aspx (uno strumento del framework .net ,che in pratica permette di scorrere classi, proprietà e metodi di uno schema xsd da codice) .
    I file devono essere divisi in .h e . cpp ,esiste un metodo con un forward declaration per gestire gli include di tutti i file delle classi in modo da non cascare in riferimenti circolari o in dichiarazione multiple?

    grazie.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2003
    Messaggi
    4,826
    Per precisare , ho creato l'albero di derivazione delle classi con un oggetto grafo(un composite)e stavo elucubrando su come organizzare gli include di ciascun file , un idea è quella di partire dagli oggetti leaf del composite e aggiungere il riferimento al parent , nel parent aggiungere il riferimento al nuovo parent e cosi via.
    ma non mi sento sicuro di questa strada , soprattutto perchè non conosco un metodo di attraversamento dagli oggetti leaf alla root , forse potrei usare un pattern che conosco poco , la chain of responsability.
    ma ripeto non sono sicuro.


    grazie.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.