Size: a a a

2021 April 25

ID

Iv@n Dereviankin in rust_offtopic
Хотя стоп
источник

ID

Iv@n Dereviankin in rust_offtopic
0_о
источник

[

[BRM]White Rabbit in rust_offtopic
а это разве не банальный тип-сумма?
источник

ID

Iv@n Dereviankin in rust_offtopic
источник

D

Danya in rust_offtopic
Это скорее трейт-сумма
источник

O

Ofee in rust_offtopic
Нет, потому что A и B являются потенциально бесконечными множествами допустимых типов
источник

[

[BRM]White Rabbit in rust_offtopic
Это Either из хаскеля, нет? Я не вдупляю до конца
источник

[

[BRM]White Rabbit in rust_offtopic
Окей, A и B в данном контексте это какие-то конкретные классы типа vector или array или классо-заполнитель, в который можно вставить всё что угодно?
источник

[

[BRM]White Rabbit in rust_offtopic
Я просто концепты не трогал
источник

D

Danya in rust_offtopic
А и В это концепты
источник

[

[BRM]White Rabbit in rust_offtopic
т.е. по сути это оно?
источник

D

Danya in rust_offtopic
Только для концептов
источник

[

[BRM]White Rabbit in rust_offtopic
источник

D

Danya in rust_offtopic
Концепт — это предикат, который проверяет удовлетворяет ли тип какому-либо множеству ограничений для него
источник

D

Danya in rust_offtopic
Например должен иметь метод foo, который возвращает что-то конвертируемое в int
источник

[

[BRM]White Rabbit in rust_offtopic
так это тайпклассы
источник

[

[BRM]White Rabbit in rust_offtopic
ага
источник

O

Ofee in rust_offtopic
template<typename T>
concept fooable_or_barable = fooable<T> || barable<T>;

void baz(fooable_or_barable auto x) {
 if constexpr (fooable<decltype(x)>)
   x.foo();
 else
   x.bar();
}

struct Fooable1 {
 void foo();
};
struct Fooable2 {
 void foo();
};
struct Barable {
 void bar();
};

struct SmthDifferent {};

int main() {
 baz(Fooable1{});
 baz(Fooable2{})
 baz(Barable{});
 // compile-time error:
 // baz(SmthDifferent{})
}
источник

[

[BRM]White Rabbit in rust_offtopic
ага, а если я много строк спустя вообще в другом файле  допишу типа
void quz(fooable_or_barable auto x) {
 if constexpr (fooable<decltype(x)>)
   x.fooooo();
 else
   x.barrrrr();
}
то это сломает компайл всей проге потому что там нереализовано что-то из моего?
источник

D

Danya in rust_offtopic
Не сломает
источник