On Monday, 3 August 2015 at 13:13:55 UTC, Andrea Fontana wrote:
Why don't you use templates? Something like:
enum ValueType
{
Init,
Min,
Max
}
auto exampleValues(T)()
{
T[ValueType] retVal;
retVal[ValueType.Init] = T.init;
static if (__traits(compiles, T.min)) retVal[ValueType.Min] =
T.min;
static if (__traits(compiles, T.max)) retVal[ValueType.Max] =
T.max;
return retVal;
}
exampleValues!int.writeln;
exampleValues!string.writeln;
Good solution!
But there is something that not perfect: it can be customizable
only with template specialization as I see. I want not only
standard values like `init` `max` or `min` but also some example
value like 1, 2, 3, 4, 5 for `int`. In last case your template
solution not so convenient as desired (introduction in language
feature like `.testValue1` seems ridiculous, and without that
only template specialization can provide customization, as I have
said).
But this seems interesting direction, and easy to implement in
object.d (without library implementation, this feature have
little benefit).