digitalmars.D - Best way to explicitly control the attributes of a template function
- tsbockman (29/29) Apr 02 2016 Jack Stouffer and I have been working on a pull request for
Jack Stouffer and I have been working on a pull request for Phobos to enable runtime dispatch for field and property access: https://github.com/D-Programming-Language/phobos/pull/4070 (It's useful when directly porting code from dynamic languages like Python.) Working with fields in this fashion is pretty easy, but I've hit a snag for property methods: if even one of the available property methods is impure, unsafe, etc., then the dispatch function must also be impure/unsafe/whatever. In order for the dispatch function to be usable in pure/ safe/etc. code, it needs to filter out those property methods which are not. This is simple enough - except that *which* attributes are required cannot be inferred from the context; it must be explicitly specified by the user of the dispatch template - somehow... A naive way to do it would be this: template example(string attrs = "pure safe nothrow nogc") { mixin("void example() " ~ attrs ~ " { /* do something */ }"); } Which could then be used like this: example!"pure safe SomeUDA"(); That's pretty ugly though, since it requires that all template functions with explicit attribute control be implemented as string mixins. Is there a better way to do this? If not, I think consideration should be given (long-term) to adding an "attribute set" construct as a new type of template parameter.
Apr 02 2016