从嵌套 class 访问父 class 变量
Access parent class variables from nested class
我想从嵌套的 class 访问变量 width/height/size,将 static 放在它们前面是可行的,但是还有其他方法吗?
class random_messages;
int max_x;
int max_y;
rand int width;
rand int height;
rand int size;
class rand_x;
randc int loc_x;
constraint sizes {
loc_x < width / 2**(size+3); //accessing here
loc_x > 0;
}
endclass
endlcass
不要误以为在classrandom_messages
里面定义了classrand_x
就自动意味着嵌套对象class 在包装器 class 的对象内实例化。声明嵌套 class 只会更改定义它的范围。
在你的情况下,如果你想访问父对象的变量,你必须执行以下操作:
(in the nested class) 声明父句柄并将父作为构造函数参数:
class rand_x;
// ...
protected random_messages m_parent;
function new(random_messages parent);
m_parent = parent;
endfunction
endclass
(in the outer class) 声明一个 inner class 的实例并将自己作为其父级传递:
class random_messages;
// ...
rand rand_x x;
function new();
x = new(this);
endfunction
endclass
我想从嵌套的 class 访问变量 width/height/size,将 static 放在它们前面是可行的,但是还有其他方法吗?
class random_messages;
int max_x;
int max_y;
rand int width;
rand int height;
rand int size;
class rand_x;
randc int loc_x;
constraint sizes {
loc_x < width / 2**(size+3); //accessing here
loc_x > 0;
}
endclass
endlcass
不要误以为在classrandom_messages
里面定义了classrand_x
就自动意味着嵌套对象class 在包装器 class 的对象内实例化。声明嵌套 class 只会更改定义它的范围。
在你的情况下,如果你想访问父对象的变量,你必须执行以下操作:
(in the nested class) 声明父句柄并将父作为构造函数参数:
class rand_x;
// ...
protected random_messages m_parent;
function new(random_messages parent);
m_parent = parent;
endfunction
endclass
(in the outer class) 声明一个 inner class 的实例并将自己作为其父级传递:
class random_messages;
// ...
rand rand_x x;
function new();
x = new(this);
endfunction
endclass