On Monday, 17 March 2014 at 13:04:36 UTC, Mike wrote:
Hello,

Consider the following silly, but illustrative example:
***********************************************
mixin template HasValue(ContainingType)
{
    uint value = ContainingType.outerValue;
}

struct MyStruct
{
    uint outerValue;

    mixin HasValue!(typeof(this));
}
***********************************************


Now what if I wanted to use that mixin in a module:
***********************************************
module myModule;

uint outerValue;

mixin HasValue!(typeof({what?}); //how do I refer to the module type there is no 'this' for modules
************************************************

Basic question: How can I have my mixin refer to the type it's mixing into, and have it work regardless of whether it's mixing into a module or a class/struct?

Thanks for the help,
Mike

That doesn't work in either case: you can't initialise a member of a mixin template with a runtime value.

To refer to the module name, just use the name of the module. Here's something that does work, to demonstrate that:

module myModule;

mixin template HasValue(alias ContainingType)
{
    alias value = ContainingType.outerValue;
}

struct foo
{
    uint outerValue;

    mixin HasValue!(typeof(this));
}

uint outerValue;

mixin HasValue!(myModule);

Reply via email to