Problem with immutables and Template typeof(this)
Ali Çehreli via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Mon Dec 29 22:01:52 PST 2014
On 12/28/2014 02:07 PM, AuoroP via Digitalmars-d-learn wrote:
> I have been trying to figure templates out...
Although the question has already been answered, here is a solution that
combines most of the suggestions that have already been made. It does
not need any kind of casting:
/* Eponymous template syntax is lighter */
struct ExampleTemplate(T)
{
T value;
this(T value)
{
this.value = value;
}
/* 1) As a shorthand, the name of the template is the same
* thing as this specific instantiation of it. For
* example, if the template is instantiated with "int",
* then ExampleTemplate alone means
* ExampleTemplate!int.
*
* 2) opAdd is marked 'const' so that it can work on
* mutable, const, and immutable objects.
*
* 3) The parameter is by-copy so that it can take rvalues as well.
*/
ExampleTemplate opAdd(const(ExampleTemplate) that) const
{
return ExampleTemplate(this.value + that.value);
/* Alternatively:
auto result = ExampleTemplate(this.value + that.value);
return result;
*/
}
}
void main()
{
/* New alias syntax makes more sense */
alias Example = ExampleTemplate!int;
immutable immutableEx = Example(1);
Example ex = Example(1);
Example ex2 = immutableEx + ex + immutableEx;
}
Ali
More information about the Digitalmars-d-learn
mailing list