Optional type parameter on a template
Luis
luis.panadero at gmail.com
Tue May 12 20:36:22 UTC 2020
I'm trying to make a SparseSet that on function of a optional
type parameter, could alongside the index set, store other data.
So I need a way to declare a optional type template parameter.
I prototyped this stuff on run.dlang, but I like know if there is
a better way :
https://run.dlang.io/is/Uhy5IT
import std;
struct S {
int x = 0;
string toString()
{
return "S(x="~ x.to!string ~")";
}
}
struct ZeroOrMore(T = uint, Types...)
if (__traits(isUnsigned, T))
{
static assert (Types.length == 0 || Types.length == 1);
T[] _t;
static if (Types.length > 0) {
alias V = Types[0];
V[] _values;
void ins(T t, V val)
{
this._t ~= t;
this._values ~= val;
}
} else {
void ins(T t)
{
this._t ~= t;
}
}
}
void main()
{
auto s = ZeroOrMore!()();
// trying to use ZeroOrMore() gives error : struct
onlineapp.ZeroOrMore cannot deduce function from argument types
!()(), candidates are: onlineapp.d(12): ZeroOrMore(T = uint,
Types...)
s.ins(456);
auto s2 = ZeroOrMore!(uint, S)();
s2.ins(123, S(666));
writeln(s); // ZeroOrMore!uint([456])
writeln(s2); // ZeroOrMore!(uint, S)([123], [S(x=666)])
}
More information about the Digitalmars-d-learn
mailing list