FatErasedPtr
- Langage dominant
- Rust
- Étoiles
- 137
- Forks
- 15
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Description
I had just fun: Type erased pointers that Drop properly:
```
pub struct FatErasedPtr {
ptr: ErasedPtr,
dropfn: fn(ErasedPtr),
}
impl From
for FatErasedPtr {
#[inline(always)]
fn from(this: P) -> Self {
fn dropfn (this: ErasedPtr) {
unsafe {
::unerase(this) };
}
FatErasedPtr {
ptr: P::erase(this),
dropfn: dropfn::
,
}
}
}
impl Drop for FatErasedPtr {
fn drop(&mut self) {
(self.dropfn)(self.ptr)
}
}
#[test]
fn faterasedptr() {
use alloc::rc::Rc;
let rc: Rc = Rc::new(123);
let fat_erased: FatErasedPtr = FatErasedPtr::from(rc);
assert_eq!(core::mem::size_of_val(&fat_erased), core::mem::size_of::()*2);
}
```
Was just a curious experiment here. I can complete that and send a PR if this is interesting.
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Piste de recherche
Commencez par examiner les API existantes de ErasablePtr et ErasedPtr, puis comparez l’implémentation proposée de FatErasedPtr et son test faterasedptr avec les utilitaires de pointeurs actuels du crate. Confirmez que l’expérience s’intègre au projet et définissez des critères d’acceptation concernant la destruction correcte et le comportement de taille démontré avant de proposer un PR.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- rust
- Domaine
- tooling
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- Plutôt claire
- Accessibilité débutants
- 30/100