2015-06-05 5 views
1

Учитывая следующий фрагмент кода:Определить общие функции типа

type 
    Base = object of RootObj 
    Consume*[T: Base] = proc(e: T): bool 

Я хочу, чтобы определить несколько типов из базовой и базового потребителя для него, как это:

type 
    BaseOne = object of Base 
    ConsumeOne = Consume[BaseOne] 

Теперь, когда я создаю новый ConsumeOne:

let co: ConsumeOne = proc(b: BaseOne): bool = false 

Я получаю следующее сообщение об ошибке компилятора: Error: type mismatch: got (proc (b: BaseOne): bool{.gcsafe, locks: 0.}) but expected 'ConsumeOne'

Что я делаю неправильно?

ответ

3

Проблема заключается в том, что классовые тип ограничения для параметров типа в настоящее время не соответствуют подтипы; Я не знаю, является ли это ошибкой или преднамеренным. На данный момент просто удалите ограничение : Base из параметра типа T.

+0

Справа. Я надеюсь, что это будет решено как можно скорее – Arrrrrrr

0

Может быть, это поможет сделать Потребляйте gcsafe:

Consume*[T: Base] = proc(e: T): bool {.gcsafe.} 
+0

Это не меняет вещь, я получил ту же ошибку. – Arrrrrrr

 Смежные вопросы

  • Нет связанных вопросов^_^