2016-09-15 2 views
0

у меня есть черта, которая реализует еще одну особенность:Ввод требование о типе члена реализации признака

trait RandomAccessIterator : Sub + VariousOthers {} 

Как указать, что для всех реализаций этого признака, в результате вычитания (тип Output в пределах Sub) должен быть определенного типа, например isize? Таким образом, если я напишу общую функцию, которая использует объекты, реализующие этот признак, я знаю (и, что более важно, компилятор знает), что результатом A - B является тип isize.

+1

Есть ли отличительная черта RandomAccessIterator: Sub + DifferentOthers + Sized {} 'не работает? Вы не указали какой-либо код, который бы показывал, как * то, что вы уже пробовали, терпит неудачу. Я бы ожидал большего от кого-то с этой 70к-репутацией :-(. – Shepmaster

+0

@Shepmaster: Да, это работает. Спасибо. Я не уверен, как показать неудачные попытки помочь вам ответить на вопрос. Это синтаксис, который я ранее не знал о том, что я мог бы бросить сто догадок о синтаксисе. Как бы это вам помогло? –

+3

У неудавшихся попыток, вероятно, был бы код, который начнет работать, когда это требование будет успешно реализовано. Это было бы полезно чтобы убедиться, что мое предположение действительно сработало. Кроме того, [ожидается, что вы покажете, что потратили усилия, прежде чем задавать вопрос] (http://meta.stackoverflow.com/q/261592/155423). Это включает в себя собственный код попытки, но и то, что вы искали здесь в SO и в других местах в Интернете. Без этого вопросы переходят к «кодовому слову, вы исправляете». См. также: [MCVE]. – Shepmaster

ответ

2
trait RandomAccessIterator : Sub<Output = isize> + VariousOthers {} 

Как обсуждалось в главе The Rust Programming Language о associated types в разделе для trait objects with associated types:

Синтаксис N=Node позволяет обеспечить конкретный тип, Node, для параметра N типа. То же самое с E=Edge. Если мы не предоставили это ограничение, мы не смогли бы убедиться, что impl соответствует этому объекту признаков.

Хотя этот объект не является признаком, применяется тот же синтаксис. Большинство людей сталкиваются с этим when using operators like Mul,