Confusing parameterized REQ in uvm_driver #(REQ,RSP)

Do I need to make parameter when I make driver class as “uvm_driver #(REQ,RSP)”?
I got an error message about “seq_item_export” in

driver.seq_item_port.connect(sequencer.seq_item_export); when I ran uvm code without  #(my_sequence_item )


class cmsdk_mcu_clock_reset_driver extends uvm_driver;
class cmsdk_mcu_clock_reset_sequencer extends uvm_sequencer #(my_sequence_item );

So I modify it as the below, the error gone about “seq_item_export”

class cmsdk_mcu_clock_reset_driver extends uvm_driver #(my_sequence_item );
class cmsdk_mcu_clock_reset_sequencer extends uvm_sequencer #(my_sequence_item );

So I did one more test I remove #(my_sequence_item ) on them. also there is no error.
but in the driver, I couldn’t use “req”.

Here I’m confused that if I declare with #(req, rsp) then how this code has more flexibility?
for example, if I declared as “class cmsdk_mcu_clock_reset_driver extends uvm_driver #(my_sequence_item )” then this code have to use only “my_sequence_item” not any other “sequence_item” couldn’t.

In reply to UVM_LOVE:

Your question is related to specialization of TLM port and export being connected .

While performing TLM connection ( via connect method ) the type parameter Must be Same type .

By default the type parameters of driver and sequencer are of type uvm_sequence_item .

You can’t have one parameter of type ’ my_sequence_item ’ and other of default type ’ uvm_sequence_item ’ .