Valid override

来自MudWiki

名称

   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)