SWIG4 --- 14 Customization Features

14 Customization Features

  在许多情况下,需要更改接口中特定声明的默认包装。例如,您可能希望提供用于捕获c++异常的钩子、添加断言或向底层代码生成器提供提示。本章描述了其中的一些自定义技术。首先,讨论异常处理。然后,描述了一种更通用的定制机制,称为“特性”。

14.1 Exception handling with %exception

  %exception指令允许你定义一个通用的异常处理程序。例如,可以指定如下参数:

%exception {
  try {
    $action
  }
  catch (RangeError) {
    ... handle error ...
  }
}

  如何处理异常取决于目标语言,例如Python:

%exception {
  try {
    $action
  }
  catch (RangeError) {
    PyErr_SetString(PyExc_IndexError, "index out-of-bounds");
    SWIG_fail;
  }
}

  在定义之后,用大括号括起来的代码将直接插入低级包装器函数中。特殊变量$action是少数支持的%exception特殊变量之一,它将被要执行的实际操作(函数调用、方法调用、属性访问等)所替代。异常处理程序在显式删除之前一直有效。这可以通过使用%exception或%noexception来完成,不需要任何代码。例如:

%exception;   // Deletes any previously defined handler

  兼容性注意:以前版本的SWIG使用了一个特殊指令%except,用于异常处理。该指令已被弃用——%exception提供了相同的功能,但实际上更加灵活。

14.1.1 Handling exceptions in C code

  

 

上一篇:nested exception is org.apache.ibatis.binding.BindingException 【Mabatis】Mapper 参数 bean与String同时使用


下一篇:Exception in thread “main“ java.lang.NoClassDefFoundError: scala/Product$class