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