einpoklum einpoklum - 8 months ago 99
C++ Question

Should I replace (void*, size) with a GSL span?

Suppose I have

int foo(void* p, size_t size_in_bytes);

and assume it doesn't make sense to make
typed. I want to be a good coder and apply the C++ core guidelines. Specifically, I want to use spans instead of (*, len) pairs. Well,
won't compile (can't add to a
void *
); and
etc. would imply foo actually expects chars, which it might not.

So should I use a
in this case, or stick with


What I chose to do, and what I think is, shall we say, sound design-wise, is implement a class named memory_region, which has all of the type-inspecific functionality of gsl::span (hence, for example, it doesn't have a begin() or an end()). It is not the same thing as a span of bytes, IMO - and I can structurally never get them mixed up.

Here's my implementation (it's part of a repository of DBMS-related GPU kernels and a testing framework I'm working on, hence the CUDA-related snippet; and it depends on some GSL, in my case gsl-lite by MS'es should be ok too I think).