2014-07-23 1 views
2

매개 변수화 된 클래스 foo이 있고 간단한 설정 도구가 있다고 가정 해 보겠습니다. 내가 클래스 범위의 외부에서이 함수를 정의하려고하면매개 변수화 된 클래스의 매개 변수를 외부 함수 정의에 사용할 수 있습니까?

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

    extern function T get_member(); 
endclass 

, 나는 (++은 C에서 같은 오류를 얻을 것, 충분히

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

공정 T.에 대한 알 수없는 유형의 오류가있는에서 SV는 템플릿/매개 변수화 메커니즘의 많은 부분을 계승 한 것 같습니다.) 따라서 C++에서는 함수 정의 앞에 템플릿 선언을 제공하여이 문제를 해결하므로 컴파일러에서 템플릿을 인식 할 수 있습니다. 다음과 같은 내용 :

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

SystemVerilog에도 비슷한 메커니즘이 존재합니까? 그렇다면 무엇입니까? 그렇지 않으면 클래스 본문 내에서 모든 매개 변수화 된 함수/작업을 정의해야합니다.

답변

5

매개 변수 유형에 액세스 할 범위를 설정하고 외부 함수 정의에서 Tfoo::T으로 변경하십시오. 예를 here

+0

덕분에 작업

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

, 그 작동합니다. 내 취향에 대해 약간 장황한데, 나는 그것을하는 C++ 방식을 선호했을 것이다. – stellarossa

+0

@stellarossa'\'T foo :: T를 정의하면 좀 덜 장황하게 만들 수 있습니다. 그러나 지구 공간을 오염시키는 것에 조심하십시오. '\'undef T'와 쌍을 이루십시오. – Greg

관련 문제