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).

Reply via email to