
Regarding native vs default:
I doubt you will be able to change the default when people start using the
library, e.g. they might use it to store something on filesystem, etc. but
I see your point.
On Tue, Dec 3, 2024 at 2:56 PM Peter Dimov via Boost
Alexander Grund wrote:
Am 03.12.24 um 12:47 schrieb Ivan Matek via Boost:
And you never do this
boost::hash2::hash_append( h, {}, v.x ); boost::hash2::hash_append( h, {}, v.y ); boost::hash2::hash_append( h, {}, v.z );
You do this instead
boost::hash2::hash_append( h, f, v.x ); boost::hash2::hash_append( h, f, v.y ); boost::hash2::hash_append( h, f, v.z );
Yes, but then again I am passing f multiple times. I don't want it to sound like I am making a big deal out of this, I can just do something like(and I actually use this idiom a lot) const auto append = [&] (const auto& val){hash_append (h, f, val);} and use that "partially applied" helper, in case I actually need to do hash_append multiple times. I think there is space for such a helper: boost::hash2::hasher append(h, f); // Or ...::hasher append(h) for default flavor append(v.x); append(v.y); append(v.z);
So I suppose I'll be adding the variadic overload, after all.
I was mostly interested in encoding f in helper template, as you mentioned
with repr() idiom I can just call that in 1 line.
In general I try to avoid variadics since error messages are
horrible(e.g. std::make_unique
error messages when class has many constructors), but it is sometimes
necessary in libraries so it may be a good idea to add it.
I wanted to check the library a bit more with regards to this, but got
distracted doing something else so here is unrelated question:
Question probably stems from my lack of understanding why are we hashing
size of ranges(tried googling if other languages do this, was unable to
find info about that), but maybe example is best:
int main() {
std::array
iters hash is 440920331 iters + size hash is 1187447304 range hash is 1187447304 My question is the following: After reading the documentation I understand that hash_append for std::span (more precisely for concept it satisfies) also hashes it's size, but it is not clear why is that desired behavior. I am probably missing something obvious but if I saw somebody passing std::span<char> to hash_append I would assume that it would just hash each byte in that span and do nothing else.
_______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost