How do I do this?

wxcvb via Digitalmars-d digitalmars-d at puremagic.com
Thu Aug 3 05:58:30 PDT 2017


On Thursday, 3 August 2017 at 10:46:06 UTC, Shachar Shemesh wrote:
> The problem: I'm writing a library. This library has logging 
> facilities, but where it's going to be used there are better 
> logging facilities. Under C, that wouldn't be a big issue:
>
> log.h:
> #ifdef REAL_LOG_LIBRARY
> #include REAL_LOG_LIBRARY
> #else
>
> // Declarations go here
>
> #endif
>
>
> I can now inject from my build system 
> -DREAL_LOG_LIBRARY=real/impl/log.h into the compilation command 
> line, and I'm done.
>
> Under D, there is no facility to transfer a string from the 
> command line to the code, so I can't use that approach.
>
> I seem to remember that D had an option of importing an 
> external file as something (string? code? anything would do for 
> my purposes). I cannot seem to find it, however. A search for 
> "string import" and "import mixin" brought back nothing useful.
>
> Help?
> Shachar

You can rely on the file passed to the compiler like this too:

```
enum canImport(string mod) = is(typeof((){mixin("import " ~ mod ~ 
";");}));
static assert(canImport!"std.traits");
static assert(!canImport!"std.craps");
```

Although, tbh, i'm not sure very it solves the issue




More information about the Digitalmars-d mailing list