rjulius Newbie 8. 7. 2021 tady založil vlákno s názvem
Pole s ukazateli na různé proměnné struct
a někdo ho pak zamknul... nechápu proč... tak samozřejmě daný problém v C/C++ řešit jednoduše pomocí
dynamic_cast< nejaka_moje_typova_promenna >( *void )->promenna_struktury
nebo
dynamic_cast< "jmeno_,moji_struktury_jako_retezec" >( *void )->promenna_struktury
není možné, nicméně tato možnost existuje v programovacím jazyce RUST :) :
use std::any::Any;
type Symbol = u32;
trait Struct {
fn get(&self, field: Symbol) -> Option<&dyn Any>;
}
trait Object {
fn downcast(&self, typ: &str) -> Option<&dyn Struct>;
}
struct MyStruct {item: i32}
const ITEM: Symbol = 0;
impl Struct for MyStruct {
fn get(&self, field: Symbol) -> Option<&dyn Any> {
if field == ITEM {Some(&self.item)} else {None}
}
}
impl Object for MyStruct {
fn downcast(&self, typ: &str) -> Option<&dyn Struct> {
if typ == "MyStruct" {Some(self)} else {None}
}
}
fn main() {
let ms = MyStruct {item: 1};
let ptr: &dyn Object = &ms;
let type_name = "MyStruct";
let item = ptr.downcast(type_name).unwrap().get(ITEM).unwrap();
assert_eq!(1, *item.downcast_ref::<i32>().unwrap());
}