Module name compile time constant?

Don nospam at nospam.com.au
Mon Apr 28 01:56:06 PDT 2008


Bill Baxter wrote:
> Don wrote:
>> Bruno Medeiros wrote:
>>> davidl wrote:
>>>> 在 Tue, 15 Apr 2008 13:00:57 +0800,Bill Baxter 
>>>> <dnewsgroup at billbaxter.com> 写道:
>>>>
>>>>> Walter Bright wrote:
>>>>>> davidl wrote:
>>>>>>>
>>>>>>> module abc.super.long.pack.awesome.mod;
>>>>>>>
>>>>>>> what if i need the string of "abc.super.long.pack.awesome.mod" 
>>>>>>> generally and don't want to copy paste differently in all my 
>>>>>>> modules?
>>>>>>  alias abc.super.long.pack.awesome.mod foo;
>>>>>
>>>>> I think he wants that full module name as a char[], though.
>>>>>
>>>>> Is that what you want, Davidl?
>>>>>
>>>>> Or do you just want to be able to say
>>>>>
>>>>>
>>>>>     import short.awesome; // aka "import 
>>>>> abc.super.long.pack.awesome.mod"
>>>>>
>>>>> If that's what you want you can create a module in short/awesome.d 
>>>>> that contains just:
>>>>>
>>>>>    module short.awesome;
>>>>>    public import abc.super.long.pack.awesome.mod;
>>>>>
>>>>> But somehow I'm thinking you actually want to automatically get 
>>>>> that module name as a string.
>>>>>
>>>>> How about going the other way around?  Start with a string?
>>>>>
>>>>> string foo = "abc.super.long.pack.awesome.mod";
>>>>> mixin(import_module(foo));
>>>>>
>>>>> where import_module  is
>>>>>
>>>>> string import_module(string name) {
>>>>>     return "import " ~ name ";" ;
>>>>> }
>>>>>
>>>>> If those don't answer your question you're gonna have to be more 
>>>>> specific.
>>>>>
>>>>>
>>>>> --bb
>>>>
>>>> Yes, i want the string. But I don't want to modify the module part 
>>>> to manually defined strings
>>>> I want some magic of module.name to get the current module name in 
>>>> compile time string form.
>>>>
>>>
>>> I tried this to see if it would work:
>>>
>>> ---  ---
>>> module foo.test;
>>>
>>> void main()
>>> {
>>>     writefln(.stringof);
>>> }
>>>
>>>
>>> Almost worked! It prints "module test". It would do what you wanted 
>>> if '.stringof' returned the fully qualified module (and didn't have 
>>> the "module " prefix).
>>
>> Maybe it's supposed to. The spec for .stringof is completely different 
>> to what's implemented.
>>
>> But anyway...
>>
>> Getting the fully qualified name is currently possible (since about 
>> D0.150) but it's a bit disgusting to do, and I can't really recommend 
>> it.  My old meta.nameof module did the job.
>> If you pass the module name as a template alias parameter, the fully 
>> qualified name appears in the mangled name. You just need to demangle 
>> it and extract the module name.
> 
> Yikes!  Devious.  I guess that's why they pay you the big bucks. ... Or 
> should if they don't.

They don't. <g>
Actually, I'm not employed as a programmer. In fact, programming doesn't 
even always appear on my performance review. :(
I'm strongly considering a career switch...



More information about the Digitalmars-d mailing list