Module name compile time constant?
Bill Baxter
dnewsgroup at billbaxter.com
Sat Apr 26 17:19:49 PDT 2008
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.
--bb
More information about the Digitalmars-d
mailing list