On 03/08/2011 09:26 AM, Wilfried Kirschenmann wrote:
enum deviceType {cpu, gpu} auto execDeviceSuffix = [deviceType.cpu:".cpu", deviceType.gpu:".gpu"];The way to get what you want to work in this case is to use a module constructor. So, you'd do something like this: string[deviceType] execDeviceSuffix; static this() { execDeviceSuffix[deviceType.cpu] = "cpu"; execDeviceSuffix[deviceType.gpu] = "gpu"; } The module constructor will be run before main does, so execDeviceSuffix will be properly filled in by then.I didn't get to the point where module constructors are introduced in Andrei's book yet. I really like this idea ! I found a similar workaround which used an useless class so that I could use the static constructor but this is even better !
This is a very nice feature, yes. But I personly see it as a workaround for the limitation that dmd, apparently, is not able to correctly evaluate many kinds of assignment expressions. And it's ugly when one has hordes of definitions -- the module is (mainly) a piece of data description: all symbols must first be declared /outside/, then redefined /inside/ static this(). Else, D would be a great data-definition language, in addition to its other qualities, thank to its literals for everything (and conversely its standard to!string for everything, which needs improvements). Think a static Lua.
Denis -- _________________ vita es estrany spir.wikidot.com
