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

时间:2014-07-23 16:19:28

标签: 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似乎继承了很多模板/参数化机制)。因此,在C ++中,您可以通过在函数定义之前提供模板声明来解决此问题,因此编译器可以识别所述模板。像这样:

template <typename T>
function T foo::get_member();
    return member;
endfunction

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

1 个答案:

答案 0 :(得分:5)

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

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

工作示例here