valid_override
名称
valid_override - 控制 `efun::` 前缀的使用
语法
int valid_override( string file, string efun_name , string main_file );
描述
在主控对象中增加 valid_override() 方法以控制 `efun::` 前缀的使用。每当驱动程序试图编译一个以 `efun::` 为前缀调用外部函数的文件时都会呼叫主控对象中的 valid_override() 方法。如果 valid_override() 返回 0 ,编译会失败。因此 valid_override() 提供了一种方式保证修改过功能的外部函数(同名模拟外部函数)无法使用 efun:: 绕过。
参数 `file` 是实际使用 efun:: 的文件,参数 `efun_name` 是通过 efun:: 调用的外部函数名称,参数 `main_file` 是准备编译的文件(包含扩展名 `.c`,而且通过使用 #include,`file` 和 `main_file` 可以不同)。
这里是一个通过 valid_override 限制重写外部函数的示例:
int valid_override(string file, string name, string main_file)
{
if (file == "/adm/obj/simul_efun")
{
return 1;
}
if (name == "destruct")
return 0;
if (name == "shutdown")
return 0;
if (name == "snoop")
return 0;
if (name == "exec")
return 0;
return 1;
}
作者
Truilkan@Basis
参考
valid_object(4), function_exists(3)
翻译
雪风(i@mud.ren)