Параметризованный следующий пул невозможен для иерархии классов объединенных объектов?

Что касается тега cpp. Этот шаблон в основном относится к параметризации и может быть реализован на C ++ с помощью шаблонов. Мой основной вопрос заключается в том, является ли это логически разрешимым шаблоном (который, я считаю, не соответствует указанному) в C ++ и AVM2, с предпочтением решить его с помощью haxe. Конкретный пример кода и запрос в целом, написанные на Haxe, компилируются в соответствующую цель C ++ логически идентичным образом.

Я спрашиваю, есть ли исправление для этого шаблона с:

  1. Логика параметризации
  2. Есть какой-то другой способ поддержать
    ссылка свободных объектов, кроме следующего свойства близко к
    оптимальная реализация прямого доступа типа члена как
    облегчается указанным следующим свойством (например, избегая отражающего / переключающего вызова для доступа к next член)
  3. Я знаю, что есть и другие
    пул реализации, это не то, что я спрашиваю.

Вопрос:

Казалось бы, что нет способа определить параметризованный пул для Class который простирается от Class что само объединено, потому что подкласс не может соответствовать Poolable_i интерфейс, потому что он не может переопределить next имущество. Это верный вывод?

То есть: Pool_pointer<Destination> не может существовать, потому что Destination
не может соответствовать никаким полезным ограничениям, указанным в Pool_pointer<Destination>

Например:

Poolable_i<T> is a base that hase a single property next:T
Point3d implements Poolable_i<Point3d>
Destination extends Point3d {
public var time:Time;
}

Это также предполагает, что вы не хотите использовать базовый класс, который сам параметризован, например, Point3d_base<T:{Poolable_i<T>,Point3d_base}> потому что может потребоваться иерархия с глубиной больше 1.

Конечно, это может быть решено несколькими способами с помощью предварительной обработки, как я собираюсь сделать. Мне просто любопытно, если я что-то упускаю из-за невозможности упомянутой реализации шаблонов.

package test.shared;
class Pool_pointer<T:Poolable_i<T>> implements Pool_i<T> {
public var free:T;
public function new() {
}
public function destroy():Void {
}
public inline function get():T {
var r:T=null;
if(free==null) {
r=new T();
} else {
r=free;
free=r.next;
}
return r;
}
public inline function put(v:T):Void {
v.next=free;
free=v;
}
}

1

Решение

Решение заключается в параметризации всей иерархии в отношении объявлений функциональности и создании typedefs / специфических классов для конкретных реализаций.

Destination_base<NextT> -> Destination extends Destination_base<Destination>
^
|
Point3d_base<NextT> -> Point3d extends Point3d_base<Point3d>

Иерархия реализации параметризована. Тьфу. Люблю твою первичную обработку.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]