Вы можете сделать это в C++. В ObjectPascal это также можно сделать, смотрите пример:
// функция Chameleon, возвращающая тип сгенерированного исключения
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type
MyBoolean = class public Value : boolean; end;
MyInteger = class public Value : integer; end;
MyClass = class public Value : TStrings; end;
TForm1 = class(TForm) Button1: TButton; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } procedure MyProc; function Chameleon : boolean; end; var
Form1: TForm1; implementation
{$R *.DFM}
function TForm1.Chameleon : boolean; var
b : MyBoolean; i : MyInteger; c : MyClass; r : integer;begin
r := Random(3); case r of 0 : begin b := MyBoolean.Create; raise b; end; 1 : begin i := MyInteger.Create; raise i; end; 2 : begin c := MyClass.Create; raise c; end; end;end;
procedure TForm1.MyProc; begin
try Chameleon; except on MyBoolean do ShowMessage('Функция возвратила класс MyBoolean'); on MyInteger do ShowMessage('Функция возвратила класс MyInteger'); on MyClass do ShowMessage('Функция возвратила класс MyClass'); end;end;
procedure TForm1.Button1Click(Sender: TObject); begin