参数化类的参数可以用在外部函数定义中吗?

ste*_*ssa 2 system-verilog

假设我有一个参数化类,foo并且在其中有一个简单的setter.

class foo #(type T = int);
    T member;

    extern function T get_member();
endclass
Run Code Online (Sandbox Code Playgroud)

如果我尝试在类范围之外定义此函数,我会得到T的未知类型错误.

function T foo::get_member();
    return member;
endfunction
Run Code Online (Sandbox Code Playgroud)

很公平,你会在C++中得到同样的错误(SV似乎继承了很多模板/参数化机制).因此,在C++中,您可以通过在函数定义之前提供模板声明来解决此问题,因此编译器可以识别所述模板.像这样的东西:

template <typename T>
function T foo::get_member();
    return member;
endfunction
Run Code Online (Sandbox Code Playgroud)

SystemVerilog中是否存在类似的机制,如果存在,它是什么?如果没有那么很明显我必须在类体中定义所有参数化函数/任务.

Gre*_*reg 5

设置范围以访问参数类型,在外部函数定义中更改Tfoo::T.

function foo::T foo::get_member();
    return member;
endfunction
Run Code Online (Sandbox Code Playgroud)

这里的工作示例