DML中是否存在C++ final关键字的等价机制,用于禁止方法重写?
DML中是否存在类似C++
final关键字的等价机制? 我现在有一个寄存器模板,里面定义了read_action方法,想要将其弃用,理想状态是在基模板里修饰这个方法,让任何导入该模板的其他模板、寄存器或字段都不能定义read_action(),如果尝试定义就触发编译错误。在C++里我可以用final关键字实现这个需求。
我的模板代码如下:
template my_read is (read) { shared method read_action(uint64 in_value) -> (uint64) throws default { return in_value; } }
请问DML中有没有类似的机制?
DML本身并没有直接对应C++ final关键字的原生语法特性来禁止方法重写,但可以通过两种间接方式实现类似需求:
用
deprecated标记配合编译警告转错误
给方法添加deprecated属性,同时在编译时启用-Werror参数(将警告转为错误)。当子类或导入模板尝试重写read_action时,编译器会触发错误。修改后的模板示例:template my_read is (read) { shared method read_action(uint64 in_value) -> (uint64) throws default deprecated { return in_value; } }利用私有成员隐藏机制
将read_action标记为private成员,这样外部导入该模板的代码无法访问或重写这个方法。不过这种方式需要确认场景是否允许方法设为私有,因为私有方法无法被外部调用。
这两种方式都能达到禁止重写并触发编译错误的目的,虽非原生的final等价语法,但足以满足需求。
内容的提问来源于stack exchange,提问作者kbrunham-intel
相关产品推荐
相关产品推荐

