The director c++ exceptions are thrown in a helper method instead of in the director overloaded method. This circumvents compiler warnings about throwing exceptions when the method has an exception specification or noexcept. If the exception is thrown, abort will still be called! In Java, the "director:noexcept" typemap can be used to do something else. This typemap should be ported to the other languages too.
50 lines
1.2 KiB
Text
50 lines
1.2 KiB
Text
/* -----------------------------------------------------------------------------
|
|
* director.swg
|
|
*
|
|
* This file contains support for director classes so that C# proxy
|
|
* methods can be called from C++.
|
|
* ----------------------------------------------------------------------------- */
|
|
|
|
#if defined(DEBUG_DIRECTOR_OWNED)
|
|
#include <iostream>
|
|
#endif
|
|
#include <string>
|
|
#include <exception>
|
|
|
|
namespace Swig {
|
|
/* Director base class - not currently used in C# directors */
|
|
class Director {
|
|
};
|
|
|
|
/* Base class for director exceptions */
|
|
class DirectorException : public std::exception {
|
|
protected:
|
|
std::string swig_msg;
|
|
|
|
public:
|
|
DirectorException(const char *msg) : swig_msg(msg) {
|
|
}
|
|
|
|
DirectorException(const std::string &msg) : swig_msg(msg) {
|
|
}
|
|
|
|
virtual ~DirectorException() throw() {
|
|
}
|
|
|
|
const char *what() const throw() {
|
|
return swig_msg.c_str();
|
|
}
|
|
};
|
|
|
|
/* Pure virtual method exception */
|
|
class DirectorPureVirtualException : public DirectorException {
|
|
public:
|
|
DirectorPureVirtualException(const char *msg) : DirectorException(std::string("Attempt to invoke pure virtual method ") + msg) {
|
|
}
|
|
|
|
static void raise(const char *msg) {
|
|
throw DirectorPureVirtualException(msg);
|
|
}
|
|
};
|
|
}
|
|
|