Best way to refer to the type of a struct inside itself ?
Ali Çehreli
acehreli at yahoo.com
Fri May 15 15:24:32 UTC 2020
On 5/15/20 8:04 AM, Paul Backus wrote:
> On Friday, 15 May 2020 at 14:55:07 UTC, Ali Çehreli wrote:
>> Additionally, the name of a template when used inside that template
>> means that instance of it. So just say Foo. :)
>>
>> struct Foo(A, B, C, size_t a, size_t b)
>> {
>> Foo * p;
>> }
>>
>> Ali
>
> To expand a little, this works because a struct template such as the one
> above is actually syntax sugar for the following:
>
> template Foo(A, B, C, size_t a, size_t b)
> {
> struct Foo
> {
> // refers to the inner `struct Foo`, not the outer `template Foo`
> Foo* p;
> }
> }
>
> The relevant parts of the language spec are:
>
> - Aggregate Templates:
> https://dlang.org/spec/template.html#aggregate_templates
> - Eponymous Templates:
> https://dlang.org/spec/template.html#implicit_template_properties
Yes, that is a consistent way of explaining it. :)
As an off-topic trivia, the same feature is in C++ as well:
#include <iostream>
template <class A, class B, class C, size_t a, size_t b>
struct Foo
{
Foo * p; // <-- Foo means the template instance
};
int main() {
Foo<int, double, long, 10, 20> f;
f.p = &f;
}
Ali
More information about the Digitalmars-d-learn
mailing list