I have a function which takes a generic argument and somewhere in the middle of the program that generic argument is typecasted to
as) and used as an index to type
I wanted to know any trait exists by which I can bound my generic type to mark it as
convertible to usize.
Note: typecasting to usize was required because earlier my code was failing with below error
the type `[&str]` cannot be indexed by `u8`
the trait `SliceIndex<[&str]>` is not implemented for `u8`
No, unfortunately conversions to
usize are lacking in the standard library. For
u8 there is
Into, but notably it's lacking for
u64. The best you could do is
TryFrom and unwrap it.
You'll need a custom trait.
num-traits has a few, e.g.
I'm unclear on the goal here. For example,
-1_i8 as usize will compile, but feels like it probably not something that makes sense to allow for indexing.
You could consider
where T: TryInto<usize>, and use
a[x.try_into().unwrap()] for indexing? But my inclination would probably just just make your caller give you a
Why not express your goal directly as a generic bound? If you want to index a slice, then just put the
SliceIndex bound on your index type. First of all, that makes more sense to the reader/caller than arbitrary conversions for who-knows-what-reason. Second, it also lets the caller index using types other than usize, eg. ranges.