Voldemort type for mixin template.

ChangLong changlon at gmail.com
Fri Jan 12 07:28:14 UTC 2018


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)










More information about the Digitalmars-d-learn mailing list