boost::filesystem classe dérivée de path() pour se simplifier la vie

boost::filesystem classe dérivée de path() pour se simplifier la vie - C++ - Programmation

Marsh Posté le 11-01-2005 à 23:52:17    

bijour, voilà je me suis fait une classe native_path() dérive de path juste pour ne avoir de path( ..., native ) à chaque fois que j'en ai besoin.
 
juste pour avoir l'avis de Taz & ceux qui aiment bien boost, est-ce bien/mal ? (j'ai cru comprendre sur sourceforge que d'autres personnes avaient fait +ou- la même chose ?)
 

Code :
  1. #pragma once
  2. #include <boost/filesystem/path.hpp>
  3. #include <string>
  4. namespace boost
  5. {
  6. namespace filesystem
  7. {
  8.  class native_path : public path
  9.  {
  10.  public:
  11.   native_path() : path() {};
  12.   native_path( const char *pth ) : path( pth, native ) {};
  13.   native_path( const std::string &pth ) : path( pth, native ) {};
  14.   native_path &operator = ( const char *pth )
  15.   {
  16.    *this = native_path(pth);
  17.    return *this;
  18.   }
  19.   native_path &operator = ( const std::string &pth )
  20.   {
  21.    *this = native_path(pth);
  22.    return *this;
  23.   }
  24.  };
  25. }
  26. }

Reply

Marsh Posté le 11-01-2005 à 23:52:17   

Reply

Marsh Posté le 11-01-2005 à 23:57:54    

je sais pas. Il me semble pas que path est un destructeur virtuel ... donc prudence

Reply

Marsh Posté le 12-01-2005 à 00:01:59    

arf, ça a l'air de tourner comme ça avec, je vais zieuter le source.

Reply

Marsh Posté le 12-01-2005 à 00:09:34    

et bien écoute, là au debug, j'ai pas de vfptr pour les boost::filesystem::path que j'ai donc à priori y'a pas de destructeur virtuel non ?
 
--- oups - j'ai compris ta phrase dans l'autre sens.
 
vu que j'ai juste fait un wrapper sur les constructeurs & assignements de 'path' normalement ça devrait pas poser de problèmes non ?

Reply

Marsh Posté le 12-01-2005 à 00:14:20    

fais juste gaffe aux fuites. Une petite fonction au nom cours ne te satisferait pas ? pourquoi à tu définis tes propres operator= ?

Reply

Marsh Posté le 12-01-2005 à 00:15:13    

ben fais gaffe à l'utilisation : si d'aventure tu t'amuses à faire du polymorphisme ... ça pourrait faire mal.

Reply

Marsh Posté le 12-01-2005 à 00:35:26    

Taz a écrit :

fais juste gaffe aux fuites. Une petite fonction au nom cours ne te satisferait pas ? pourquoi à tu définis tes propres operator= ?


 
pour faire le 'native' aussi.
 
mais je suis en train de me demander si je suis pas en train de me prendre le chou pour rien.

Reply

Marsh Posté le 12-01-2005 à 08:52:00    

bjone a écrit :

pour faire le 'native' aussi.


et pourquoi tu crois que l'operator= synthétisé ne traduirait pas tout seul
 
np = "blah";  
 
par
 
np.operator=( native_path("blah" ) );
 
?

Reply

Marsh Posté le 12-01-2005 à 10:31:25    

exact, j'avais oublié que j'avais mis des explicit à un moment et que j'ai enlevé ensuite.


Message édité par bjone le 12-01-2005 à 10:31:36
Reply

Marsh Posté le 12-01-2005 à 11:26:39    

fais toi une fonction inline avec un nom court
 
{
  using My:boost_helper::N;
  x = N(z);
} // vite je réduis la portée

Reply

Marsh Posté le 12-01-2005 à 11:26:39   

Reply

Marsh Posté le 12-01-2005 à 11:36:08    

ouais, je crois que c'est ce que je vais faire, ça évitera les blagues.

Reply

Marsh Posté le 21-01-2005 à 11:39:00    

tiens je m'y suis remis
sinon j'ai essayé aussi cette approche, je voulais me faire une approche d'écriture un peu plus sympa genre:
 

Code :
  1. using boost::filesystem;
  2.     using boost::filesystem::path_cast;
  3.     void foo( const path &pth )
  4.     {
  5.       ......
  6.     }
  7.     using boost::filesystem::path_cast
  8.     truc()
  9.     {
  10.        foo( (nat) "c:\\mon super chemin long bien relou\\tes dents" );
  11.     }


 
plustôt qu'un: (pour une question d'esthétisme)
 

Code :
  1. foo( fnat( "c:\\mon super chemin long bien relou\\tes dents" ) );


 
où 'fnat' serait une function.
 
avec ça:
 

Code :
  1. namespace boost
  2. {
  3. namespace filesystem
  4. {
  5.  namespace path_cast
  6.  {
  7.   template <bool CHECKER( const std::string & name )> class path_name_check : public path
  8.   {
  9.   public:
  10.    template <typename T> path_name_check( T value ) : path( value, CHECKER ) {};
  11.   };
  12.   typedef path_name_check<native> nat;
  13.   typedef path_name_check<no_check> noc;
  14.   typedef path_name_check<windows_name> win;
  15.   typedef path_name_check<portable_posix_name> posix;
  16.   typedef path_name_check<portable_name> pname;
  17.   typedef path_name_check<portable_directory_name> pdir;
  18.   typedef path_name_check<portable_file_name> pfile;
  19.  }
  20. }
  21. }

Reply

Marsh Posté le 21-01-2005 à 11:58:40    

attend, t'es entrain de rajouter ta sauce dans les NS de boost ? ça va pas ?

Reply

Marsh Posté le 21-01-2005 à 14:11:48    

dans le même namespace, mais je peux le changer ça c'est pas un problème. (si c'est ça qui t'inquiète)
(dumoins un sous-namespace)


Message édité par bjone le 21-01-2005 à 14:12:34
Reply

Marsh Posté le 21-01-2005 à 14:44:07    

non, fais dans un truc séparé

Reply

Marsh Posté le 21-01-2005 à 15:29:06    

oki no prob.
 
c'était juste par rapport au cast volontaire.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed