| Thread overview | ||||||
|---|---|---|---|---|---|---|
|
January 14, 2015 [std.traits] Detect complex numbers | ||||
|---|---|---|---|---|
| ||||
There is "isFloatingPointType!T" to find out whether type T is one of the floating point types but I could not find anything equivalent for complex numbers (cdouble, cfloat, creal) in Phobos 2.066 (which I installed with MacPorts for the record). Am I missing something?
My goal was to detect types suitable as scalars in a linear algebra context. I had to do it by hand:
enum bool supportedScalar(T) = is(ScalarTypeOf!T) && !isAggregateType!T;
private {
alias ScalarTypeList = TypeTuple!(float, double, real,
cfloat, cdouble, creal);
template ScalarTypeOf(T) {
static if (is(AliasThisTypeOf!T AT) && !is(AT[] == AT))
alias X = ScalarTypeOf!AT;
else
alias X = OriginalType!T;
static if (staticIndexOf!(Unqual!X, ScalarTypeList) >= 0)
alias ScalarTypeOf = X;
else
static assert(0, T.stringof~" is not a floating point type");
}
}
| ||||
January 14, 2015 Re: [std.traits] Detect complex numbers | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Luc Bourhis | I forgot to mention the obvious: I simply parroted the code in std.traits! | |||
January 14, 2015 Re: [std.traits] Detect complex numbers | ||||
|---|---|---|---|---|
| ||||
Posted in reply to Luc Bourhis | On Wednesday, 14 January 2015 at 13:38:05 UTC, Luc Bourhis wrote: > There is "isFloatingPointType!T" to find out whether type T is one of the floating point types but I could not find anything equivalent for complex numbers (cdouble, cfloat, creal) in Phobos 2.066 (which I installed with MacPorts for the record). Am I missing something? > > My goal was to detect types suitable as scalars in a linear algebra context. I had to do it by hand: > > enum bool supportedScalar(T) = is(ScalarTypeOf!T) && !isAggregateType!T; > > private { > alias ScalarTypeList = TypeTuple!(float, double, real, > cfloat, cdouble, creal); > template ScalarTypeOf(T) { > static if (is(AliasThisTypeOf!T AT) && !is(AT[] == AT)) > alias X = ScalarTypeOf!AT; > else > alias X = OriginalType!T; > > static if (staticIndexOf!(Unqual!X, ScalarTypeList) >= 0) > alias ScalarTypeOf = X; > else > static assert(0, T.stringof~" is not a floating point type"); > } > } It doesn't answer your question as such, but you should take a look at: http://dlang.org/phobos/std_complex.html | |||
January 14, 2015 Re: [std.traits] Detect complex numbers | ||||
|---|---|---|---|---|
| ||||
Posted in reply to John Colvin | > It doesn't answer your question as such, but you should take a look at:
> http://dlang.org/phobos/std_complex.html
The planned obsolescence of cdouble and consort is another issue I wanted to raise actually but better do it in a dedicated thread.
| |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply