question about using std.bitmanip.read
BBaz via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Fri Nov 6 19:50:05 PST 2015
On Saturday, 7 November 2015 at 03:19:44 UTC, Charles wrote:
> Hi guys,
>
> It's me again... still having some issues pop up getting
> started, but I remain hopeful I'll stop needing to ask so many
> questions soon.
>
> I'm trying to use std.bitmanip.read; however, am having some
> issues using it. For basic testing I'm just trying to use:
>
> read!double(endianess, ubyteArr).writeln;
>
> endianess is an Endian from std.system, and ubyteArr is an 8
> byte ubyte[].
>
> When I run this I get:
>
> Error: template std.bitmanip.read cannot deduce function from
> argument types !(double)(Endian, ubyte[]), candidates are:
> std.bitmanip.read(T, Endian endianness = Endian.bigEndian,
> R)(ref R range) if (canSwapEndianness!T && isInputRange!R &&
> is(ElementType!R : const(ubyte)))
> dmd failed with exit code 1.
>
>
> Clearly that didn't work, so I tried excluding the endianess:
>
> read!double(ubyteArr).writeln;
>
> and that does work! But its the wrong byte order, so its
> incorrect anyways.
>
> I went to std.bitmanip to look for unittests using the Endian,
> and the only one that does uses read!(T, endianness), which
> needs endianness to be known at compile time, which I don't
> have.
>
> Any suggestions?
You must create a classic run-time branch:
---
if(endianess == Endian.bigEndian)
read!(Endian.bigEndian, double)(ubyteArr).writeln;
else
read!(Endian.littleEndian, double)(ubyteArr).writeln;
---
or in the same fashion use a final switch.
More information about the Digitalmars-d-learn
mailing list