On Thursday, 28 March 2013 at 20:24:50 UTC, Vidar Wahlberg wrote:
A bit on the side: It seems to me as importing std.bitmanip
somehow adds new properties to my array (".read()" and
".write()", for example). Not necessarily a bad thing, more of
"I've not seen this before, I was expecting that I were to
concatenate the bytes from the conversion to my buffer using ~".
Sorry about the repeated postings ... I'm trying to read & answer
it while also dealing with the norovirus :x
---
import std.stdio : writeln;
void main() {
ubyte[] array;
array ~= 5.toUbytes();
array ~= 6.toUbytes();
writeln(array);
}
ubyte[T.sizeof] toUbytes(T)(T val) @safe {
ubyte[T.sizeof] buf;
std.bitmanip.append!T(buf[], val);
return buf;
}
---
I see your latest post and see that you don't necessary care how
to do it, but, I figured I might as well provide yet another way
that's @safe and simple.
On Thursday, 28 March 2013 at 20:24:50 UTC, Vidar Wahlberg wrote:
Great, I have a solution, so I go back to my project and
implement it like I implemented it in my test code, but when I
compile my project after this addition I get a new cryptic
error message: "Error: __overloadset isn't a template".
After digging a bit I realized that it's because in my project
I also import std.file, apparently there are some collisions
between std.bitmanip and std.file. Again it's solvable, but
it's yet another fight with the language/standard library. I
would also assume that it's not that uncommon for a module that
use std.bitmanip to also use std.file, meaning that this error
potentially may occur often.
Yeah, that's a bit of an issue. Weird cryptic error. Oh well, as
a general rule, try to import only the parts of the module you're
actually using. This does two great things: it prevents namespace
pollution causing errors like you've seen, and it documents WHERE
someone has to look in order to find documentation on a function
you're using in your module.
As 1100110 noted, using a fully qualified ID is also a potential
solution, especially if you only intend on using it in one place
and the line isn't very noisy to begin with (as I showed in my
example above).
"why is this done like this, couldn't it be done much easier?".
Maybe. What needs to be made easier and how would you suggest to
fix it? The error message, certainly. Probably the documentation
too. But the API itself seems sane to me in this instance, it
just needs a better description.