<p>Am 03.08.2013 05:24 schrieb "Dennis Poon" <<a href="mailto:dennis@avidsoft.com.hk">dennis@avidsoft.com.hk</a>>:<br>
><br>
><br>
>>>> What about code size?<br>
>>>>        <br>
>>><br>
>>><br>
>>> The code size for one unit is the same as if you had (in that example)<br>
>>> declared a variant of "IsIn" for each "LongInt" and "String". So for each<br>
>>> "IsIn<T>" specialization with different types new code is generated if it<br>
>>> does not yet exist in that unit. This means that if you call "IsIn<LongInt>"<br>
>>> in different units you'll have a "IsIn<LongInt>" implementation in each<br>
>>> unit. This is the same as for generic types btw.<br>
>>><br>
>>> Regards,<br>
>>> Sven<br>
>>>      <br>
>><br>
>><br>
>> And the same (problem) in C++. Is there some proposal to mitigate the<br>
>> code duplication? Or the official position is that if the project is<br>
>> big enough to suffer from the bloat it should avoid itself the<br>
>> duplicate declarations?<br>
>><br>
>><br>
>>    <br>
><br>
> If we create a third unit with a wrapper function in which it specializes the call, can we avoid the duplication code problem?</p>
<p>And what would you have won with that? The idea behind generics is that you don't need to write a common piece of code multiple times for diffrent types in the source, but that the compiler is handling that for you.<br>

In your variant you'd need to call the wrapper instead of directly the generic to keep the size small and if you call the wrapper multiple times you'd trade performance (additional call) for size. Inlining might reduce this a bit again though... </p>

<p>Regards,<br>
Sven</p>