diff --git a/Doc/Manual/Octave.html b/Doc/Manual/Octave.html index de39a1d96..b5168b899 100644 --- a/Doc/Manual/Octave.html +++ b/Doc/Manual/Octave.html @@ -625,6 +625,16 @@ On the C++ side, the default mappings are as follows: Octave can also utilise friend (i.e. non-member) operators with a simple %rename: see the example in the Examples/octave/operator directory.

+

+Octave has several operators for which no corresponding C++ operators exist. For example, the Octave code +

+
+x=[a,b,c];
+
+

+calls the Octave operator horzcat of the class of a. Hence, if a is of type swig_ref you can write an overload for this operator for your wrapped C++ class by placing a file @swig_ref/horzcat.m in the Octave load path (like for every Octave class, see Creating a Class). This Octave function file is then called whenever the above Octave code is executed for a variable of type swig_ref. +

+

30.3.10 Class extension with %extend

diff --git a/Examples/octave/operator/@swig_ref/horzcat.m b/Examples/octave/operator/@swig_ref/horzcat.m index 00fdfd5ce..6d4a55b20 100644 --- a/Examples/octave/operator/@swig_ref/horzcat.m +++ b/Examples/octave/operator/@swig_ref/horzcat.m @@ -1,6 +1,9 @@ % test octaves concatenation operator -function ret=horzcat(a, b) - % return the concatenation of two ComplexVal values as a cell array. +function ret=horzcat(varargin) + % return the concatenation of several ComplexVal values as a cell array. % (not really useful but it tests the concatenation of swig_ref objects) - ret={a, b}; + ret={}; + for i=1:length(varargin) + ret{i}=varargin{i}; + end end diff --git a/Examples/octave/operator/runme.m b/Examples/octave/operator/runme.m index 41c2c14a7..ff8b594da 100644 --- a/Examples/octave/operator/runme.m +++ b/Examples/octave/operator/runme.m @@ -47,6 +47,5 @@ if swig_octave_prereq(3,8,0) endif # concatenation operator, note: calls @swig_ref/horzcat.m -# g = [a, b, c]; -# printf("g = %s\n",disp(g)); -# Above temporarily removed as broken in octave-7.2.0, see https://github.com/swig/swig/issues/2353 +g = [a, b, c]; +printf("g = %s\n",disp(g));