this post was submitted on 10 Sep 2023
9 points (100.0% liked)

Rust Programming

8191 readers
22 users here now

founded 5 years ago
MODERATORS
 

I want to do basically this:

struct MyStruct < T> {
    data: T
}

impl < T> for MyStruct < T> {
    fn foo() {
        println!("Generic")
    }
}

impl for MyStruct < u32> {
    fn foo() {
        println!("u32")
    }
}

I have tried doing

impl < T: !u32> for MyStruct < T> {
    ...
}

But it doesn't seem to work. I've also tried various things with traits but none of them seem to work. Is this even possible?

EDIT: Fixed formatting

you are viewing a single comment's thread
view the rest of the comments
[โ€“] [email protected] 6 points 1 year ago (1 children)

What you are looking for is called specialization.

It is currently unstable and incomplete, which means you can activate it by adding the macros #![feature(specialization)] and #![allow(incomplete_features)] at the beginning of the file. But you have no guarantee that it will work the same way on the next version of rust.

[โ€“] calcopiritus 4 points 1 year ago

Yeah, that seems like it would work! Unfortunately I can't use unstable features. I'll keep it in mind for other projects though.