Thread overview |
---|
January 11, 2018 Voldemort type for mixin template. | ||||
---|---|---|---|---|
| ||||
When I try add some sub type for struct with mixin template, seems there is no way to hidden the private type. Is there a way to hidden type from mix template like Voldemort type ? fake code: mix template TypeX () { alias This = typeof(this); static struct Unique { This* _ptr ; } static struct Helper { private Unique data; } alias TypeX = { alias PublicName = Helper ; } } struct Node { mixin TypeX!(); PublicName helper; } |
January 11, 2018 Re: Voldemort type for mixin template. | ||||
---|---|---|---|---|
| ||||
Posted in reply to ChangLong | On Thursday, 11 January 2018 at 08:56:11 UTC, ChangLong wrote:
> When I try add some sub type for struct with mixin template, seems there is no way to hidden the private type.
>
> Is there a way to hidden type from mix template like Voldemort type ?
>
> fake code:
>
> mix template TypeX () {
> alias This = typeof(this);
>
> static struct Unique {
> This* _ptr ;
> }
> static struct Helper {
> private Unique data;
> }
> alias TypeX = {
> alias PublicName = Helper ;
> }
> }
>
> struct Node {
> mixin TypeX!();
> PublicName helper;
> }
Hi, can you explain a bit more? The question is not entirely clear to me. Can you mixin a struct of type PublicName and just hide everything in there?
mixin template TypeX() {
struct PublicName {
private alias This = typeof(this);
private struct Unique {
This* _ptr;
}
private Unique _data;
alias _data this;
}
}
void main(string[] args) {
mixin TypeX;
PublicName helper;
helper._ptr.writeln;
}
Cheers
|
January 12, 2018 Re: Voldemort type for mixin template. | ||||
---|---|---|---|---|
| ||||
Posted in reply to aliak | On Thursday, 11 January 2018 at 21:30:43 UTC, aliak wrote:
> On Thursday, 11 January 2018 at 08:56:11 UTC, ChangLong wrote:
>> When I try add some sub type for struct with mixin template, seems there is no way to hidden the private type.
>>
>> Is there a way to hidden type from mix template like Voldemort type ?
>>
>> fake code:
>>
>> mix template TypeX () {
>> alias This = typeof(this);
>>
>> static struct Unique {
>> This* _ptr ;
>> }
>> static struct Helper {
>> private Unique data;
>> }
>> alias TypeX = {
>> alias PublicName = Helper ;
>> }
>> }
>>
>> struct Node {
>> mixin TypeX!();
>> PublicName helper;
>> }
>
> Hi, can you explain a bit more? The question is not entirely clear to me. Can you mixin a struct of type PublicName and just hide everything in there?
>
> mixin template TypeX() {
> struct PublicName {
> private alias This = typeof(this);
> private struct Unique {
> This* _ptr;
> }
> private Unique _data;
> alias _data this;
> }
> }
>
> void main(string[] args) {
> mixin TypeX;
> PublicName helper;
> helper._ptr.writeln;
> }
>
> Cheers
If PublicName is complex type, require has some private type information. there is noway to hidden the private type from the scope of mixin. the purpose is hidden helper._ptr from main function to avoid name conflict.
I try use mixin fo modify struct to allow it has some kind zero cost abstract, or memory manage function. since the system is complex it will import a lot symbol into the class.
I has to put the mix template into struct, since I has to add member with type from mix template. and I also want to avoid access ref_count from the struct body(and a lot other name conflict)
|
Copyright © 1999-2021 by the D Language Foundation