Thread overview
Behavior of __FILE__ in mixin template
Jun 22, 2016
Andre Pany
Jun 22, 2016
Ali Çehreli
Jun 22, 2016
Andre Pany
June 22, 2016
Hi,

I thought a mixin template is copied into the place where the mixin statement
exists and then the coding is evaluated.
This seems not to be true for __FILE__

I have a module form, which has a class Form. This module also contains
following mixin template

mixin template formTemplate()
{
	void generateForm()
	{
		string getFormName(string file =  __FILE__)()
		{
			import std.string: indexOf;
			return file[0..file.indexOf(".")]~".frm";
		}

		enum fileContent = import(getFormName());
	}
}

In another module myform I have a class MyForm in which I call the mixin statement:
mixin formTemplate.

The purpose of the template coding is: The enum fileContent should contain
the text of a file, which has the same name as the module but the file ending .frm.

I tried different things, but either it doesn't compile or __FILE__ returns "form"
instead of "myform".

Is this behavior correct? Do you have any tip?

Kind regards
André



June 22, 2016
On 06/22/2016 10:07 AM, Andre Pany wrote:
> Hi,
>
> I thought a mixin template is copied into the place where the mixin
> statement
> exists and then the coding is evaluated.
> This seems not to be true for __FILE__

Apparently its the whole template that supports that. Is moving the 'file' parameter to the entire template acceptable?

mixin template formTemplate(string file = __FILE__)
{
    // ...
}

Ali

June 22, 2016
On Wednesday, 22 June 2016 at 17:52:26 UTC, Ali Çehreli wrote:
> On 06/22/2016 10:07 AM, Andre Pany wrote:
> > Hi,
> >
> > I thought a mixin template is copied into the place where the
> mixin
> > statement
> > exists and then the coding is evaluated.
> > This seems not to be true for __FILE__
>
> Apparently its the whole template that supports that. Is moving the 'file' parameter to the entire template acceptable?
>
> mixin template formTemplate(string file = __FILE__)
> {
>     // ...
> }
>
> Ali

Perfekt, thanks a lot.

Kind regards
André