假设我有一个参数化类,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中是否存在类似的机制,如果存在,它是什么?如果没有那么很明显我必须在类体中定义所有参数化函数/任务.
设置范围以访问参数类型,在外部函数定义中更改T
为foo::T
.
function foo::T foo::get_member();
return member;
endfunction
Run Code Online (Sandbox Code Playgroud)
这里的工作示例
归档时间: |
|
查看次数: |
1244 次 |
最近记录: |