System verilog 参数化类中的参数能否用于外部函数定义?

System verilog 参数化类中的参数能否用于外部函数定义?,system-verilog,System Verilog,假设我有一个参数化类foo,其中有一个简单的setter class foo #(type T = int); T member; extern function T get_member(); endclass 如果我试图在类范围之外定义这个函数,我会得到T的未知类型错误 function T foo::get_member(); return member; endfunction 公平,你会在C++中得到同样的错误(SV似乎继承了很多模板/参数化机制)。因此,

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

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

    extern function T get_member();
endclass
如果我试图在类范围之外定义这个函数,我会得到T的未知类型错误

function T foo::get_member();
    return member;
endfunction

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

template <typename T>
function T foo::get_member();
    return member;
endfunction
模板
函数T foo::get_member();
返回成员;
端功能

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

设置访问参数类型的范围,在外部函数定义中将
t
更改为
foo::t

function foo::T foo::get_member();
    return member;
endfunction

工作示例

谢谢,这很有效。有点冗长的我的口味,我宁愿用C++的方式来做。@ StelaRoSa,你可以“定义t:fo::t”,使它有点冗长。但要小心污染你的全球空间;将其与'undef T'配对