This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Problem with class operators.


I don't know.  I always put my templated definitions in the header
file. MSVC++ usually errors on other uses also, I'm surprised these
work.

corey

On 7/25/05, Kristian Kratzenstein <kristian.kratzenstein@kielnet.net> wrote:
> Corey, Eljay,
> 
> This kind works also with gcc, but not with small methods (CW and VC could
> handle small methods too).
> 
> meanwhile : I declare the class fully
> 
> template<class T>
> class x
> {
> public:
>         x();
>         ~x();
> ....
> }
> 
> before using them, so I'm allowed to use x<char> ch.
> 
> But the methods are defined in the cpp file. And now came the compiler /
> linker problem.
> bigger methods (4 lines or more) are fine. Gcc compile them, and I could
> link to them also from other files, cause gcc doesn't use any kind of
> inline to optimize them away. They are preserved. But smaller are gone,
> gcc put them into the code (inline). So I could not link to them.
> 
> What is now my conclusion : put small methods into the class decleration.
> But this looks dirty (sorry, but I try to hold my code clean). Is no other
> way, to stop gcc to inline small methods ?
> 
> thanks,
> 
> Kristian
> 
> corey taylor <corey.taylor@gmail.com> on Montag, 25. Juli 2005 at 20:13
> +0100 wrote:
> >Kristian,
> >
> >  Are you asking if there is a way for the compiler to make note of an
> >internal linkage and instantiation in one file and translate that to
> >another file?
> >
> >  I think that you'll find scoping rules will limit this.  The
> >declaration and sometimes definition needs to be visible at the time
> >of instantiation.
> >
> >  A basic example is section 14.7 paragraph 6 of the specification:
> >
> >If an implicit instantiation of a class template specialization is
> >required and the template is declared but not
> >defined, the program is ill-formed.
> >
> >[Example:
> >template<class T> class X;
> >
> >X<char> ch; // error: definition of X required
> >—end example]
> >
> >Paragraph 3 gives examples for required method instantiations.
> >
> >corey
> >
> >On 7/25/05, Kristian Kratzenstein <kristian.kratzenstein@kielnet.net>
> >wrote:
> >> Hi Eljay,
> >>
> >> Nearly as I thought. But : When the template method / function is used
> >in
> >> the related cpp file, then the Linker could link from other files to the
> >> same function (with same type).
> >> Therefor I use a dummyfunction.
> >>
> >> The problem now is, that CW and VC preserve the methods during
> >compiling.
> >> gcc now optimize them away (small, like GetBuffer or so), so they run in
> >> the file, but cannot be linked.
> >>
> >> So, is there a way to get those methods preserved, so I could link to
> >them
> >> ?
> >>
> >> I know, the best is : into the Headers. But I made template classes
> >> (some), which are based on each other. Cause the size, I would like to
> >> have them in cpp / h file. Also this looks more clean.
> >>
> >> Kind regards
> >>
> >> Eljay Love-Jensen <eljay@adobe.com> on Montag, 25. Juli 2005 at 17:32
> >> +0100 wrote:
> >> >Hi Kristian,
> >> >
> >> >Non-specialized template functions and methods need to be defined in
> >the
> >> >header file which declares them.
> >> >
> >> >Otherwise they are only visible to the translation unit in which they
> >are
> >> >defined.
> >> >
> >> >HTH,
> >> >--Eljay
> >> >
> >> >
> >> >
> >>
> >>
> >>
> >> --------------------------------------------
> >> Kristian Kratzenstein
> >> Gettorf
> >>
> >> Kristian.Kratzenstein@KielNET.net
> >> --------------------------------------------
> >>
> >>
> >>
> >>
> 
> 
> --------------------------------------------
> Kristian Kratzenstein
> Gettorf
> 
> Kristian.Kratzenstein@KielNET.net
> --------------------------------------------
> 
> 
>

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]