假设我有一个参数化类,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 次 |
| 最近记录: |