std.format.write
This is a submodule of std.format.
It provides two functions for writing formatted output: formatValue and formattedWrite. The former writes a single value. The latter writes several values at once, interspersed with unformatted text.
The following combinations of format characters and types are available:
Enums can be used with all format characters of the base type.
Structs, Unions, Classes, and InterfacesAggregate types can define various toString functions. If this function takes a FormatSpec or a format string as argument, the function decides which format characters are accepted. If no toString is defined and the aggregate is an input range, it is treated like a range, that is 's', 'r' and a compound specifier are accepted. In all other cases aggregate types only accept 's'.
toString should have one of the following signatures:
void toString(Writer, Char)(ref Writer w, const ref FormatSpec!Char fmt)
void toString(Writer)(ref Writer w)
string toString();Where Writer is an output range which accepts characters (of type Char in the first version). The template type does not have to be called Writer.
Sometimes it's not possible to use a template, for example when toString overrides Object.toString. In this case, the following (slower and less flexible) functions can be used:
void toString(void delegate(const(char)[]) sink, const ref FormatSpec!char fmt);
void toString(void delegate(const(char)[]) sink, string fmt);
void toString(void delegate(const(char)[]) sink);When several of the above toString versions are available, the versions with Writer take precedence over the versions with a sink. string toString() has the lowest priority.
If none of the above mentioned toString versions are available, the aggregates will be formatted by other means, in the following order:
If an aggregate is an input range, it is formatted like an input range.
If an aggregate is a builtin type (using alias this), it is formatted like the builtin type.
If all else fails, structs are formatted like Type(field1, field2, ...), classes and interfaces are formatted with their fully qualified name and unions with their base name.
Copyright
Functions 3
uint formattedWrite(Writer, Char, Args...)(auto ref Writer w, const scope Char[] fmt, Args args)Converts its arguments according to a format string and writes the result to an output range.uint formattedWrite(alias fmt, Writer, Args...)(auto ref Writer w, Args args) if (isSomeString!(typeof(fmt)))dittovoid formatValue(Writer, T, Char)(auto ref Writer w, auto ref T val, scope const ref FormatSpec!Char f)Formats a value of any type according to a format specifier and writes the result to an output range.