假设我有一个参数化的类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
SystemVerilog中是否存在类似的机制,如果存在,它是什么?如果没有那么很明显我必须在类体中定义所有参数化的函数/任务。
答案 0 :(得分:5)
设置范围以访问参数类型,在外部函数定义中将T
更改为foo::T
。
function foo::T foo::get_member();
return member;
endfunction
工作示例here