 |
C++Talk.NET C++ language newsgroups
|
| View previous topic :: View next topic |
| Author |
Message |
Cornu Nicolas Guest
|
Posted: Sun Apr 10, 2005 8:15 am Post subject: Définir une classe log et l'utiliser comme cerr |
|
|
Bonjour,
J'aimerais définir une classe log
et l'utiliser comme cerr.
log << "erreur";
J'ai éssayer plusieurs surcharge de l'opérateur <<
en définissant à l'extèrieur de la classe log une surcharge
sans succès
Merci d'avance,
Cornu Nicolas
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sun Apr 10, 2005 8:46 am Post subject: Re: Définir une classe log et l'utiliser comme cerr |
|
|
On Sun, 10 Apr 2005 10:15:27 +0200, "Cornu Nicolas"
<nicolas.cornu (AT) club-internet (DOT) fr>:
| Quote: | J'aimerais définir une classe log
et l'utiliser comme cerr.
log << "erreur";
|
class Log
{
public:
template
{
//...
return *this;
}
};
--
;-)
|
|
| Back to top |
|
 |
Cornu Nicolas Guest
|
Posted: Sun Apr 10, 2005 2:27 pm Post subject: Re: Définir une classe log et l'utiliser comme cerr |
|
|
class Logger : public ILogger
{
public:
Logger();
~Logger();
void write(std::string);
template <typename T> Logger& operator << (T const& t) { return *this; };
};
----------------------------------------------------------------------------
-----
#include "logger.h"
int main(int argc, char *argv[])
{
ILogger *log = new Logger();
log->write("132");
log << "123";
std::string s;
std::cin >> s;
return EXIT_SUCCESS;
}
----------------------------------------------------------------------------
-----
main.cpp(31): error C2296: '<<' : non conforme, l'opérande gauche est du
type 'ILogger *'
main.cpp(31): error C2297: '<<' : non conforme, l'opérande droit est du type
'const char [4]'
D'avance merci,
"Fabien LE LEZ"
news:upph51p25iru9bbe53lvssi0dqlgu9dihs (AT) 4ax (DOT) com...
| Quote: | On Sun, 10 Apr 2005 10:15:27 +0200, "Cornu Nicolas"
[email]nicolas.cornu (AT) club-internet (DOT) fr[/email]>:
J'aimerais définir une classe log
et l'utiliser comme cerr.
log << "erreur";
class Log
{
public:
template
{
//...
return *this;
}
};
--
|
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sun Apr 10, 2005 2:44 pm Post subject: Re: Définir une classe log et l'utiliser comme cerr |
|
|
On Sun, 10 Apr 2005 16:27:18 +0200, "Cornu Nicolas"
<nicolas.cornu (AT) club-internet (DOT) fr>:
| Quote: | int main(int argc, char *argv[])
{
ILogger *log = new Logger();
|
Tu te crois en Java ?
ILogger log;
Ben oui, dans ton code "log" est un pointeur, pas un objet.
--
;-)
|
|
| Back to top |
|
 |
Cornu Nicolas Guest
|
Posted: Sun Apr 10, 2005 3:09 pm Post subject: Re: Définir une classe log et l'utiliser comme cerr |
|
|
J'ai besoin de créer une classe virtuelle pure.
class ILogger {
public:
ILogger();
virtual ~ILogger() = 0;
virtual void write(std::string) = 0;
virtual template <typename T> Logger& operator << (T const& t) = 0;
};
NC
"Fabien LE LEZ"
news:osei51tvs1v8lal8t7a513e389evgk32bu (AT) 4ax (DOT) com...
| Quote: | On Sun, 10 Apr 2005 16:27:18 +0200, "Cornu Nicolas"
[email]nicolas.cornu (AT) club-internet (DOT) fr[/email]>:
int main(int argc, char *argv[])
{
ILogger *log = new Logger();
Tu te crois en Java ?
ILogger log;
log << "123";
Ben oui, dans ton code "log" est un pointeur, pas un objet.
--
|
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sun Apr 10, 2005 3:16 pm Post subject: Re: Définir une classe log et l'utiliser comme cerr |
|
|
On Sun, 10 Apr 2005 16:27:18 +0200, "Cornu Nicolas"
<nicolas.cornu (AT) club-internet (DOT) fr>:
| Quote: | int main(int argc, char *argv[])
{
ILogger *log = new Logger();
log->write("132");
log << "123";
std::string s;
std::cin >> s;
return EXIT_SUCCESS;
}
|
Note que le code ci-dessus est totalement incorrect, puisque "log" est
créé par new et jamais détruit.
--
;-)
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sun Apr 10, 2005 3:18 pm Post subject: Re: Définir une classe log et l'utiliser comme cerr |
|
|
On Sun, 10 Apr 2005 17:09:44 +0200, "Cornu Nicolas"
<nicolas.cornu (AT) club-internet (DOT) fr>:
Note : inutile de recopier mon message, surtout après ton propre
message.
D'une manière générale, tu peux virer toute ligne de citation qui se
trouve après la dernière ligne que tu tapes.
Cf <http://www.giromini.org/usenet-fr/repondre.html>.
| Quote: | J'ai besoin de créer une classe virtuelle pure.
|
Et ?
Si j'ai bien compris, ILogger (encore un Java-isme, ce nom :-/ ) est
une classe de base, non instanciable, et Logger est une classe
instanciable dérivée de ILogger.
Dans ce cas, un code correct et représentatif serait :
void f (ILogger& log)
{
log << "Hello world!" << endl;
}
int main()
{
Logger mon_logger;
f (mon_logger);
}
Mais normalement, on ferait dériver Logger (ou ILogger) de ostream,
pour pouvoir écrire :
void f (ostream& log)
{
log << "Hello world!" << endl;
}
int main()
{
Logger mon_logger;
f (mon_logger);
f (cout);
f (cerr);
}
--
;-)
|
|
| Back to top |
|
 |
Cornu Nicolas Guest
|
Posted: Sun Apr 10, 2005 3:41 pm Post subject: Re: Définir une classe log et l'utiliser comme cerr |
|
|
on peut pas fair sans passer par la fonction f ?
|
|
| Back to top |
|
 |
Cornu Nicolas Guest
|
Posted: Sun Apr 10, 2005 3:44 pm Post subject: Re: Définir une classe log et l'utiliser comme cerr |
|
|
Le probleme vient de virtual template ...
Je ne sais pas comment declaré la surcharge d el'operateur au niveau de la
clase virtuelle ILogger
Je ne suis pas un adepte de Java mais plutot de .NET
Je préfère suffixer mes interface avec un I :)
|
|
| Back to top |
|
 |
Vincent Lascaux Guest
|
Posted: Sun Apr 10, 2005 3:53 pm Post subject: Re: Définir une classe log et l'utiliser comme cerr |
|
|
| Quote: | class Logger : public ILogger
{
public:
Logger();
~Logger();
void write(std::string);
template <typename T> Logger& operator << (T const& t) { return *this; };
};
|
Le template devrait être dans ILogger
class ILogger
{
public:
virtual ~ILogger() { }
virtual void write(const std::string& s)=0;
template
ILogger& operator << (const T& t)
{
std::stringstream ss;
ss << t;
write(ss.str());
}
};
| Quote: | ----------------------------------------------------------------------------
-----
#include "logger.h"
int main(int argc, char *argv[])
{
ILogger *log = new Logger();
log->write("132");
log << "123";
|
*log << "123";
--
Vincent
|
|
| Back to top |
|
 |
Cornu Nicolas Guest
|
Posted: Sun Apr 10, 2005 3:58 pm Post subject: Re: Définir une classe log et l'utiliser comme cerr |
|
|
J'ai beosin de redefinir la fonction dans les classe filles de ILogger
je prévoit de faire un FileLogger, DatabaseLogger ...
Nico
"Vincent Lascaux" <nospam (AT) nospam (DOT) org> a écrit dans le message de
news:42594c3a$0$6815$636a15ce (AT) news (DOT) free.fr...
| Quote: | class Logger : public ILogger
{
public:
Logger();
~Logger();
void write(std::string);
template <typename T> Logger& operator << (T const& t) { return
*this; };
};
Le template devrait être dans ILogger
class ILogger
{
public:
virtual ~ILogger() { }
virtual void write(const std::string& s)=0;
template
ILogger& operator << (const T& t)
{
std::stringstream ss;
ss << t;
write(ss.str());
}
};
--------------------------------------------------------------------------
--
-----
#include "logger.h"
int main(int argc, char *argv[])
{
ILogger *log = new Logger();
log->write("132");
log << "123";
*log << "123";
--
Vincent
|
|
|
| Back to top |
|
 |
Vincent Lascaux Guest
|
Posted: Sun Apr 10, 2005 4:00 pm Post subject: Re: Définir une classe log et l'utiliser comme cerr |
|
|
"Cornu Nicolas" <nicolas.cornu (AT) club-internet (DOT) fr> a écrit dans le message de
news: 42594d0d$0$15285$7a628cd7 (AT) news (DOT) club-internet.fr...
| Quote: | J'ai beosin de redefinir la fonction dans les classe filles de ILogger
je prévoit de faire un FileLogger, DatabaseLogger ...
|
Tu pourras (devras même) y redéfinir write (qui est virtuelle pure)
--
Vincent
|
|
| Back to top |
|
 |
Cyrille Guest
|
Posted: Sun Apr 10, 2005 4:08 pm Post subject: Re: Définir une classe log et l'utiliser comme cerr |
|
|
Cornu Nicolas a écrit :
| Quote: | J'ai beosin de redefinir la fonction dans les classe filles de ILogger
je prévoit de faire un FileLogger, DatabaseLogger ...
|
Pour ça vous pouvez utiliser ce qu'on vient juste de vous donner, en
surchargeant la fonction virtuelle write.
A part ça n'oubliez pas de lire ceci, svp:
http://www.giromini.org/usenet-fr/repondre.html
--
win the yes need the no to win against the no!
|
|
| Back to top |
|
 |
Cornu Nicolas Guest
|
Posted: Sun Apr 10, 2005 4:27 pm Post subject: Re: Définir une classe log et l'utiliser comme cerr |
|
|
Oui s'est vrai je ne fesait pas appel a la fonction write dans le code de
l'operateur de surcharge.
|
|
| Back to top |
|
 |
Fabien LE LEZ Guest
|
Posted: Sun Apr 10, 2005 5:49 pm Post subject: Re: Définir une classe log et l'utiliser comme cerr |
|
|
On Sun, 10 Apr 2005 17:44:31 +0200, "Cornu Nicolas"
<nicolas.cornu (AT) club-internet (DOT) fr>:
| Quote: | Je ne suis pas un adepte de Java mais plutot de .NET
|
C'est la même chose. La principale différence est l'éditeur.
| Quote: | Je préfère suffixer mes interface avec un I
|
"Préfixer", tu veux dire ?
Note que le terme "interface" est peu courant en C++. Le concept même
m'est peu familier -- j'ai rarement l'occasion de faire des classes ne
contenant que des fonctions virtuelles pures.
--
;-)
|
|
| Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|