On Apr 11, 7:33*am, James Kanze <james.ka...@gmail.com> wrote:
> On Apr 11, 1:55 am, Ian Collins <ian-n...@hotmail.com> wrote:
>
> > On 04/11/10 12:38 PM, Immortal Nephi wrote:
> > > I sometimes put static keyword after class definition. *Is
> > > static safe to use with iostream classes? *I need to place
> > > it in the function body. *The string in the function body
> > > stays in memory for lifetime until program terminates.
> > Your terminology is a bit of a muddle, but yes, you can have a
> > static stream object in a function.
>
> More than a bit. *You can also use static after a class
> definition, e.g.:
>
> * * class Toto
> * * {
> * * * * // *...
> * * } static x;
>
> But you can't provide a class definition for std:
stream, for
> example, because it's already defined.
>
> Also, C has deprecated placing static in this place: if a
> storage class specifier is present, it should come first, e.g.:
>
> * * static std:
fstream log("toto.log");
>
> I would consider it good form in C++ to follow these rules as
> well.
Trace function in my example is not a bit of muddle. I find some
ways to add more flexibility. My code sounds like non-standard
debugging report, but programmers easily understand my code when they
examine class definition.
James tells good example to add static to ofstream log. I think that
he means to place it in the global scope or outside class definition
in file scope.
I want to add wrapper to class log. I place ofstream log in the
class log body. I will use ofstream log when I want to write trace
message to the file each line. Sometimes, I want to store trace
message to static ostringstream log in the function body. If eExit
( enum variable ) is set to true condition, then all trace message
lines stored in static ostringstream log will be displayed in the
window MessageBox.
The function looks like
Trace( var < 10, “The value: var “ << var << “ must be less than “ <<
var2 << “.\n” ).
Notice operator << is placed in the function parameter. Sounds like
invalid C++ rules? It is not a function, but it is a macro.
#define Mtrace( expr, message ) \
Trace( expr, message )
I use prefix Hungarian notation and I can identify which is real
function or macro. Very simple. A bit of muddle is rare.