2013-11-24 5 views

ответ

4

Я не думаю, что это возможно. Это означает, полиморфный конструкцию, которая не предусмотрена для структур в D.

Такая функциональность поддерживается druntime для классов, хотя:

class A {} 

auto ti = typeid(A); 

void main() 
{ 
    auto instance = cast(A) ti.create(); 
    assert(instance); 
} 

Можно возможно реализовать подобную заводскую инфраструктуру для целей, отличных классов типов, но это не доступный из коробки (и несколько обескуражен).

+0

Думаю, я буду использовать классы, чем! Благодаря! –

+0

Возможной возможностью было бы создать блок памяти с длиной == ti.init.length, затем скопировать ti.init на него и передать в структуру ... хотя затем, если вы знаете тип структуры для создания to, вы можете просто использовать 'new Struct()' вместо этого ... так что вы можете сделать один с typeinfo, но не использовать его. –

+0

Ситуация на самом деле аналогична для классов: 'create' возвращает' Object', а не конкретный тип и литье. Хотя он смягчается тем, что он может использовать вместо обычного интерфейса вместо виртуальной диспетчеризации. Это в значительной степени причина, почему это не очень полезно для структур. –

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