172 похожих чатов

А подскажите по какой причине нельзя из функции в трейте

вернуть трейт?

20 ответов

23 просмотра

Потому что трейт сам по себе это не тип

cevek- Автор вопроса
Ramtaic Natcher
Потому что трейт сам по себе это не тип

это же по сути фат поинтер, почему нельзя то

всм вернуть трейт

cevek
это же по сути фат поинтер, почему нельзя то

По сути трейт это не тип. А вот dyn трейт - это уже тип, хоть и безразмерный.

cevek- Автор вопроса
Ramtaic Natcher
По сути трейт это не тип. А вот dyn трейт - это уж...

не дает ни так trait X { fn foo() -> impl X; } ни так trait X { fn foo() -> dyn X; }

cevek
не дает ни так trait X { fn foo() -> impl X; ...

Предлагаю посмотреть на то, что пишет компилятор:/

cevek
не дает ни так trait X { fn foo() -> impl X; ...

1. во-первых у тебя не обжект сейф трейт 2. во-вторых вероятно нужен бокс

В первом случае ты возвращаешь анонимный тип, который имплементирует X.

cevek
не дает ни так trait X { fn foo() -> impl X; ...

trait X { type Foo: X; fn foo() -> Self::Foo; } Вероятно ты так хочешь написать

cevek- Автор вопроса
Ramtaic Natcher
В первом случае ты возвращаешь анонимный тип, кото...

мм, вот так еще работает trait X { fn foo(&self) -> dyn Y; } без селфа дает ошибку

cevek
мм, вот так еще работает trait X { fn foo(&sel...

потому что ни один язык в мире не разрешает писать статический виртуальный метод (в терминах ООП)

Ramtaic Natcher
В первом случае ты возвращаешь анонимный тип, кото...

Функции с impl Trait на месте возвращаемого типа в трейтах пока не завезли.

Ramtaic Natcher
Функции с impl Trait на месте возвращаемого типа в...

делается ассоц тип как я выше показал и в 99% случаях этого будет хватать

cevek
мм, вот так еще работает trait X { fn foo(&sel...

Разве оно вот так компилируется?

cevek- Автор вопроса
Ramtaic Natcher
Разве оно вот так компилируется?

трейт описать дает, но имплементировать не получается так

cevek
трейт описать дает, но имплементировать не получае...

Ну потому что возвращаемый тип из функции должен быть с определённым размером

Похожие вопросы

Обсуждают сегодня

Ребят в СИ можно реализовать ООП?
Николай
33
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
core\config\database\connections\default.php На всякий случай проверь всё же файл <?php return [ 'driver' => env('DB_TYPE', 'mysql'), //$database_type 'host' => env('D...
Andrey K
2
Всем доброго вечера. Разрабатываю 32 раз. приложение в Delphi. Столкнулся с тем, что стандартный  TFilestream  не работает с большим файлом > 2 ГБайт (после вызова функции see...
Vadim Gl
16
Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
добрый день. Подскажите, есть сайт на 1.4.7 и я хочу обновиться, особо ничего не меняя. мне выбирать версию 1.4.35 или третью ветку? и можно ли обновлять "как есть", или нужно...
Digital Cat
12
народ, плиз хелп, всю голову сломал себе уже... разве может быть так, что GetProcAddress( GetModuleHandle( "kernel32.dll" ), "SetThreadDescription" ) вернёт ненулевое значение...
Iluha Companets
12
Кто кодит под Лазарем на винде, у вас аналогично VCL переопределяются CreateWnd и CreateParams для конкретных классов контролов и все заданные флаги влияют?
А Андрей
11
У меня задача: написать брокер сообщений. Очереди и потребители. Очереди поддерживают приоритеты. Очередь отдает сообщения, только обработчикам с соответствующими характеристи...
Aleksandr Filippov
2
Карта сайта