Как сделать тип зависимым от постоянного универсального параметра в Rust?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как сделать тип зависимым от постоянного универсального параметра в Rust?

Сообщение Anonymous »

Я новичок в Rust. Я хочу, чтобы тип зависел от постоянного универсального параметра в Rust. В C++ этого легко добиться с помощью метапрограммирования:

Код: Выделить всё

template
struct MyStruct {
using MyType = char const *;
};

template
struct MyStruct {
using MyType = std::int8_t;
};

template
struct MyStruct {
using MyType = std::int16_t;
};
Я пробовал сделать нечто подобное в Rust:

Код: Выделить всё

trait MyTrait {
type MyType;
}

struct MyStruct;

impl MyTrait for MyStruct {
type MyType = str;
}

impl MyTrait for MyStruct {
type MyType = i8;
}

impl MyTrait for MyStruct {
type MyType = i16;
}
Это не работает. Компилятор говорит:

Код: Выделить всё

...
conflicting implementations of trait `MyTrait` for type `MyStruct`
...
conflicting implementations of trait `MyTrait` for type `MyStruct`
...
Я ожидал, что Rust поймет, что первая универсальная реализация MyStruct — это только случай по умолчанию, когда он не может рассчитывать ни на один другой, как это имеет место в C++. Я провел небольшое исследование, и кажется, что есть способ заставить его работать, явно ограничивая значения N, для которого определена первая универсальная реализация, но для этого требуется включить экспериментальную функцию из ночной сборки компилятора. Однако я ищу способ сделать это с помощью последней стабильной версии компилятора без включения каких-либо экспериментальных функций. Есть ли способ сделать это или Rust по своей сути ограничен в метапрограммировании по сравнению с C++?
РЕДАКТИРОВАТЬ: Я понимаю, что невозможно добиться того, чего я хочу, в стабильном компиляторе.

Подробнее здесь: https://stackoverflow.com/questions/798 ... er-in-rust
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»