Обобщающие указатели через `mem :: transmute ()`

Я пытаюсь написать привязки Rust для библиотеки коллекции C (Judy Arrays [1]), которая предоставляет только пространство для хранения значения ширины указателя. В моей компании имеется достаточное количество существующего кода, который использует это пространство для непосредственного хранения не указательных значений, таких как целые числа ширины указателя и небольшие структуры. Я хотел бы, чтобы мои привязки Rust разрешали безопасный для типов доступ к таким коллекциям с использованием обобщений, но у меня возникают проблемы с корректной работой семантики хранения указателей.

mem::transmute() Функция кажется одним из потенциальных инструментов для реализации желаемого поведения, но попытка использовать его на экземпляре параметризованного типа приводит к ошибке при сборе с толку.

Пример кода:

pub struct Example<T> {
    v: usize,
    t: PhantomData<T>,
}

impl<T> Example<T> {
    pub fn new() -> Example<T> {
        Example { v: 0, t: PhantomData }
    }

    pub fn insert(&mut self, val: T) {
        unsafe {
            self.v = mem::transmute(val);
        }
    }
}

Результирующая ошибка:

src/lib.rs:95:22: 95:36 error: cannot transmute to or from a type that contains type parameters in its interior [E0139]
src/lib.rs:95             self.v = mem::transmute(val);
                                   ^~~~~~~~~~~~~~

Означает ли это, что тип, состоящий только из параметра, «содержит параметры типа внутри» и, таким образом,transmute() просто не будет работать здесь? Любые предложения о том, как это сделать?

(Связанный вопроспытаясь достичь того же результата, но не обязательноmem::transmute().)

[1] Я знаю о существующихrust-judy проект, но он не поддерживает сохранение указателей, которое я хочу, и я пишу эти новые привязки в основном как учебное упражнение в любом случае.

Ответы на вопрос(1)

Ваш ответ на вопрос