Мне было интересно, есть ли более прямой способ использовать полиморфизм для набора классов, генерируемых параметризованным классом. Работает следующий системный код Verilog. Есть ли более элегантный способ? EDIT: Можно ли реализовать что-то подобное на C++?Параметрированный класс и полиморфизм
`define OVERRIDE_PARAMETER_CPU parameter WIDTH=32 ;
`define OVERRIDE_PARAMETER_GFX parameter WIDTH=16 ;
class Req #(parameter WIDTH=8);
bit[WIDTH-1:0] Address;
virtual function Print;
$display("Generic: %x[%0d]",Address,WIDTH);
endfunction
endclass
typedef Req#(8) generic_req ;
class CPU_Req extends generic_req;
`OVERRIDE_PARAMETER_CPU
function Print;
$display("CPU: %x[%0d]",Address,WIDTH);
endfunction
endclass
class GFX_Req extends generic_req;
`OVERRIDE_PARAMETER_GFX
function Print;
$display("GFX: %x[%0d]",Address,WIDTH);
endfunction
endclass
program Test ;
generic_req Req_Q[$],Temp,Generic_Req;
CPU_Req C_Req;
GFX_Req G_Req;
initial
begin
C_Req=new();
G_Req=new();
Generic_Req=new();
C_Req.Address=32'h1234;
G_Req.Address=32'hFF;
Generic_Req.Address=32'h0;
Req_Q.push_back(Generic_Req);
Req_Q.push_back(C_Req);
Req_Q.push_back(G_Req);
while(Req_Q.size()!=0)
begin
Temp=Req_Q.pop_front();
Temp.Print();
end
end
endprogram
работает во что? Для меня это не похоже на C++, но помечается как таковое. – CashCow
как это C++? Вы забыли тег? – sehe
Отредактировано: мне было интересно, поддерживает ли C++ обработку параметризованных классов, таких как расширенные классы, или это неправильно. – Jean