Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C++ > Use static after class definition?

Reply
Thread Tools

Use static after class definition?

 
 
Immortal Nephi
Guest
Posts: n/a
 
      04-11-2010
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.

enum Ereport_Behavior
{
eEnter,
eTrace,
eExit
};

void Trace( const Ereport_Behavior eReport_Behavior,
const string strText )
{
static ostringstream ossText;

if( eReport_Behavior == eEnter )
{
ossText.str( “” );
ossText << “Entering…\n”;
}
else if( eReport_Behavior == eTrace )
ossText << strText;
else if( eReport_Behavior == eExit )
{
ossText << “Exiting…\n\n”;
cout << ossText.str();
}
}

int main()
{
Trace( eEnter, “” );
Trace( eTrace, “Testing Trace()…” );
Trace( eExit, “” );

Return 0;
}
 
Reply With Quote
 
 
 
 
Ian Collins
Guest
Posts: n/a
 
      04-11-2010
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.

--
Ian Collins
 
Reply With Quote
 
 
 
 
James Kanze
Guest
Posts: n/a
 
      04-11-2010
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.

--
James Kanze
 
Reply With Quote
 
Immortal Nephi
Guest
Posts: n/a
 
      04-11-2010
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.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Why inner class can not have static data, static fields or nested class? Robin Java 0 06-06-2007 11:16 AM
referring to static fields of enclosing class from static inner class? bugbear Java 4 08-23-2006 08:26 AM
Nested Class, Member Class, Inner Class, Local Class, Anonymous Class E11 Java 1 10-12-2005 03:34 PM
Instantiating a static class( Class with all static members - methods and variables) SaravanaKumar Java 6 10-19-2004 08:20 AM
IMPORT STATIC; Why is "import static" file scope? Why not class scope? Paul Opal Java 12 10-10-2004 11:01 PM



Advertisments
 



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57