From: Dr. T. M. <tij...@ma...> - 2006-03-31 16:44:11
|
Matthias wrote: > Python usually outputs something like > > NotImplementedError: No matching function for overloaded =20 > 'RenderState_SetPixelShaderParam' > > if it can't find a suitable overload for the function > in question. Not necessarily. Take this trivial class: class Foo { private: int X, Y; public: Foo(int id); Foo(const char *name); void setCoord(int x, int y); void setCoord(int x); }; If you say =A0 =A0f =3D Foo( 1.2 ) you get the error message =A0 =A0TypeError: in method 'new_Foo', argument 1 of type 'char const *' This is rather helpful (though an argument of type 'int' would actually be fine as well). However, if you say =A0 =A0f =3D Foo( 1, 2 ) the dispatcher function generates 'your' error message =A0 =A0NotImplementedError: No matching function for overloaded 'new_Foo' Or if you say f1 =3D Foo( 1 ) f1.setCoord( 1, 'two' ) you get a nice error message TypeError: in method 'Foo_setCoord', argument 3 of type 'int' which accurately states which argument is wrong (argument 3, as 'self' is argument 1). However, if you say =A0 =A0f1.setCoord( 1, 2, 3 ) you get the dreaded error message =A0 =A0NotImplementedError: No matching function for overloaded 'Foo_setCoo= rd' This suggests the following pattern: If a function with the given number of arguments exists, this is called, and it will produce a fairly exact error message, stating nicely which argument is wrong. If no such function exists, the dispatcher function prints "No matching function ...". So for our example f =3D Foo( 1, 2 ) a more precise error message could be: =A0 =A0NotImplementedError: wrong number of arguments (2) for overloaded function 'new_Foo' > Maybe this message could be enhanced to tell the user > the type of the parameter that was passed and probably > a list of accepted types?=20 How about something like this: NotImplementedError: wrong number of arguments (2) for overloaded function 'new_Foo' Possible prototypes are: __init__( id ) # int __init__( name ) # str Or is this too verbose? =2D Tijs |