|
From: Siva C. <siv...@ya...> - 2004-09-01 04:47:46
|
hello all,
I have a question on using namespaces. Say I want to
build a class ClassA and put it in a namespace abc.
Then I would declare the class in a header file,
header1.h, like:
#ifndef __HEADER1_H__
#define __HEADER1_H__
namespace abc
{ // Start of namespace brace.
class ClassA
{
...
};
} // End of namespace brace.
#endif // __HEADER1_H__
Now I would like to include this header file in
another header file, header2.h. Here again I want to
declare a class ClassB under the same namespace abc.
This ClassB is inherited from ClassA. So to avoid
writing abc::ClassA everywhere I just say:
using namespace abc;
at the begining of the file. My file would be like:
#ifndef __HEADER2_H__
#define __HEADER2_H__
#include "header1.h"
using namespace abc;
namespace abc
{ // Start of namespace brace.
class ClassB : public ClassA
{
...
};
} // End of namespace brace.
#endif // __HEADER2_H__
My question is here: By explicitly putting a statement
like
using namespace abc;
I am including such a statement in all my code which
use this header file header2.h. Is there a way to
avoid such a thing from happening without losing the
functionality I want it to be there for? Or is it that
I am not using it in the right manner?
Thanks a lot for having enough patience to read this
long,
Siva Chandra.
_______________________________
Do you Yahoo!?
Win 1 of 4,000 free domain names from Yahoo! Enter now.
http://promotions.yahoo.com/goldrush
|
|
From: Hielke <hie...@he...> - 2004-09-01 15:09:42
|
AFAIK there is no way you could safely use usingstatements in your
header files. So AVOID it (As you did mention by yourself it is not very
kind to force users of your code to use namespaces they did not declare
themselves)! Just try to be a somewhat less lazier :o).
However there are neat ways using those in your member implementations.
Personally I'd like to use internal header files for that purpose.
Including an 'in-between-headerfile' from your source code which
includes the actual classdefinition headerfile. My code organization
then looks as follows:
// member1.cc
#include "classa.ih" // include internal header, note the "i"
void Member1()
{
}
// classa.ih
#include "classa.h" // include actual definition header
/* Includes, namespacedeclarations, etc. for your sourcefiles here*/
using namespace blabla;
// classa.h
#ifndef _CLASSA_H_
#define _CLASSA_H_
class A
{
...
void Member1();
};
#endif
This approach however has one big disadvantage. In IDE's such as Dev-CPP
you have to include those files in the linking process manually since
Dev-CPP doesn't recognize the ".ih" (or whatever you'd like to use for
internal headers) extension.
Regards,
Hielke
Siva Chandra wrote:
>hello all,
>
>I have a question on using namespaces. Say I want to
>build a class ClassA and put it in a namespace abc.
>Then I would declare the class in a header file,
>header1.h, like:
>
>#ifndef __HEADER1_H__
>#define __HEADER1_H__
>
>namespace abc
>{ // Start of namespace brace.
>
>class ClassA
>{
>...
>};
>
>} // End of namespace brace.
>
>#endif // __HEADER1_H__
>
>Now I would like to include this header file in
>another header file, header2.h. Here again I want to
>declare a class ClassB under the same namespace abc.
>This ClassB is inherited from ClassA. So to avoid
>writing abc::ClassA everywhere I just say:
>
>using namespace abc;
>
>at the begining of the file. My file would be like:
>
>#ifndef __HEADER2_H__
>#define __HEADER2_H__
>
>#include "header1.h"
>
>using namespace abc;
>
>namespace abc
>{ // Start of namespace brace.
>
>class ClassB : public ClassA
>{
>...
>};
>
>} // End of namespace brace.
>
>#endif // __HEADER2_H__
>
>My question is here: By explicitly putting a statement
>like
>
>using namespace abc;
>
>I am including such a statement in all my code which
>use this header file header2.h. Is there a way to
>avoid such a thing from happening without losing the
>functionality I want it to be there for? Or is it that
>I am not using it in the right manner?
>
>Thanks a lot for having enough patience to read this
>long,
>
>Siva Chandra.
>
>
>
>
>_______________________________
>Do you Yahoo!?
>Win 1 of 4,000 free domain names from Yahoo! Enter now.
>http://promotions.yahoo.com/goldrush
>
>
>-------------------------------------------------------
>This SF.Net email is sponsored by BEA Weblogic Workshop
>FREE Java Enterprise J2EE developer tools!
>Get your free copy of BEA WebLogic Workshop 8.1 today.
>http://ads.osdn.com/?ad_id=5047&alloc_id=10808&op=click
>_______________________________________________
>Dev-cpp-users mailing list
>Dev...@li...
>TO UNSUBSCRIBE: http://www23.brinkster.com/noicys/devcpp/ub.htm
>https://lists.sourceforge.net/lists/listinfo/dev-cpp-users
>
>
>
|
|
From: Per W. <pw...@ia...> - 2004-09-01 20:50:11
|
About playing a bit with project settings etc. Am I the only one who use
to add extra rules to the Makefiles?
I always add 'include pwm.mak' to the Makefile.win, where this file
contains (among other things):
depend:
$(CPP) -M $(CXXFLAGS) $(OBJ)
include .depend
This allows me to use Makefile.win externally or with "fast but imperfekt
dependancies" in Dev-C++ and just manually run 'make depend' when I know
that I have added more #includes to some source file. It also makes sure
that changes to system include files (<>) results in recompilation.
When running with large projects, running without "fast but imperfect
dependency generation" takes very long time while the files are scanned
before compilation, and having it checked regularly produces strage errors
when too few source files have been recompiled.
/Per W
On Wed, 1 Sep 2004, Hielke wrote:
> AFAIK there is no way you could safely use usingstatements in your
> header files. So AVOID it (As you did mention by yourself it is not very
> kind to force users of your code to use namespaces they did not declare
> themselves)! Just try to be a somewhat less lazier :o).
> However there are neat ways using those in your member implementations.
> Personally I'd like to use internal header files for that purpose.
> Including an 'in-between-headerfile' from your source code which
> includes the actual classdefinition headerfile. My code organization
> then looks as follows:
>
> // member1.cc
> #include "classa.ih" // include internal header, note the "i"
>
> void Member1()
> {
> }
>
> // classa.ih
> #include "classa.h" // include actual definition header
>
> /* Includes, namespacedeclarations, etc. for your sourcefiles here*/
> using namespace blabla;
>
> // classa.h
> #ifndef _CLASSA_H_
> #define _CLASSA_H_
>
> class A
> {
> ...
> void Member1();
> };
>
> #endif
>
> This approach however has one big disadvantage. In IDE's such as Dev-CPP
> you have to include those files in the linking process manually since
> Dev-CPP doesn't recognize the ".ih" (or whatever you'd like to use for
> internal headers) extension.
>
> Regards,
> Hielke
>
>
> Siva Chandra wrote:
>
> >hello all,
> >
> >I have a question on using namespaces. Say I want to
> >build a class ClassA and put it in a namespace abc.
> >Then I would declare the class in a header file,
> >header1.h, like:
> >
> >#ifndef __HEADER1_H__
> >#define __HEADER1_H__
> >
> >namespace abc
> >{ // Start of namespace brace.
> >
> >class ClassA
> >{
> >...
> >};
> >
> >} // End of namespace brace.
> >
> >#endif // __HEADER1_H__
> >
> >Now I would like to include this header file in
> >another header file, header2.h. Here again I want to
> >declare a class ClassB under the same namespace abc.
> >This ClassB is inherited from ClassA. So to avoid
> >writing abc::ClassA everywhere I just say:
> >
> >using namespace abc;
> >
> >at the begining of the file. My file would be like:
> >
> >#ifndef __HEADER2_H__
> >#define __HEADER2_H__
> >
> >#include "header1.h"
> >
> >using namespace abc;
> >
> >namespace abc
> >{ // Start of namespace brace.
> >
> >class ClassB : public ClassA
> >{
> >...
> >};
> >
> >} // End of namespace brace.
> >
> >#endif // __HEADER2_H__
> >
> >My question is here: By explicitly putting a statement
> >like
> >
> >using namespace abc;
> >
> >I am including such a statement in all my code which
> >use this header file header2.h. Is there a way to
> >avoid such a thing from happening without losing the
> >functionality I want it to be there for? Or is it that
> >I am not using it in the right manner?
> >
> >Thanks a lot for having enough patience to read this
> >long,
> >
> >Siva Chandra.
> >
> >
> >
> >
> >_______________________________
> >Do you Yahoo!?
> >Win 1 of 4,000 free domain names from Yahoo! Enter now.
> >http://promotions.yahoo.com/goldrush
> >
> >
> >-------------------------------------------------------
> >This SF.Net email is sponsored by BEA Weblogic Workshop
> >FREE Java Enterprise J2EE developer tools!
> >Get your free copy of BEA WebLogic Workshop 8.1 today.
> >http://ads.osdn.com/?ad_id=5047&alloc_id=10808&op=click
> >_______________________________________________
> >Dev-cpp-users mailing list
> >Dev...@li...
> >TO UNSUBSCRIBE: http://www23.brinkster.com/noicys/devcpp/ub.htm
> >https://lists.sourceforge.net/lists/listinfo/dev-cpp-users
> >
> >
> >
>
>
>
> -------------------------------------------------------
> This SF.Net email is sponsored by BEA Weblogic Workshop
> FREE Java Enterprise J2EE developer tools!
> Get your free copy of BEA WebLogic Workshop 8.1 today.
> http://ads.osdn.com/?ad_id=5047&alloc_id=10808&op=click
> _______________________________________________
> Dev-cpp-users mailing list
> Dev...@li...
> TO UNSUBSCRIBE: http://www23.brinkster.com/noicys/devcpp/ub.htm
> https://lists.sourceforge.net/lists/listinfo/dev-cpp-users
>
|
|
From: Alvin T. <alv...@th...> - 2004-09-04 13:30:30
|
Siva Chandra wrote:
> Now I would like to include this header file in
> another header file, header2.h. Here again I want to
> declare a class ClassB under the same namespace abc.
> This ClassB is inherited from ClassA. So to avoid
> writing abc::ClassA everywhere I just say:
>
> using namespace abc;
>
> at the begining of the file. My file would be like:
>
> #ifndef __HEADER2_H__
> #define __HEADER2_H__
>
> #include "header1.h"
>
> using namespace abc;
>
> namespace abc
> { // Start of namespace brace.
>
> class ClassB : public ClassA
> {
> ...
> };
>
> } // End of namespace brace.
>
> #endif // __HEADER2_H__
>
> My question is here: By explicitly putting a statement
> like
>
> using namespace abc;
>
> I am including such a statement in all my code which
> use this header file header2.h. Is there a way to
> avoid such a thing from happening without losing the
> functionality I want it to be there for? Or is it that
> I am not using it in the right manner?
simply drop the 'using namespace abc;' statement. you have no reason to
use it in your example. anything in the 'namespace abc {' block
automatically uses the namespace.
-alvin
|