"Victor Bazarov" <> wrote in message
news:. ..
> sks wrote:
>> I thought all template instantiations were inlined until I analyzed
>> the following code.
>>
>> template<typename t>
>> class Something
>> {
>> public:
>> inline int getSomething() { return 1; }
>
> 'inline' here is superfluous. Any member function defined in the class
> definition is inline.
>
>> int getAnother();
>> };
>>
>> template<typename t>
>> int Something<t>::getAnother()
>> {
>> return 2;
>> }
>>
>> (I may not have the syntax exactly correct here since I am not
>> copying/pasting the code that I tested at work today).
>
> I thin you got the right syntax.
>
>> Anyway, when I analyzed the assembly code, the compiler generated a
>> symbol for "getSomething" but there wasn't one for "getAnother" (it
>> seemed to be inlined).
>
> That's of no consequence here.
>
>> Can we conclude from this that all templates are not inlined?
>
> No. Whatever one particular implementation does is immaterial, really.
>
> Besides, when compiling this particular code, the compiler could throw
> everything away. The code is not _used_, so the template is never
> _instantiated_.
>
> V
I do call both methods for a particular template instantiation though.
I made a mistake on my original post. One of my paragraphs should have said:
' Anyway, when I analyzed the assembly code, the compiler DID NOT GENERATE a
symbol for "getSomething" but GENERATED ONE for "getAnother" '.
So, can I conclude that templates SOMETIMES are not inlined?
If I used the above approach of separating the implementation of a member
function from the class definition, then the symbol is generated for it,
however, if the implementation of the method is defined within the class
definition, like I did above, then it seemed to be inlined.
Thanks.
|