On Fri, Jan 07, 2005 at 21:07:09 +0100, Murray Cumming wrote: > On Fri, 2005-01-07 at 20:26 +0100, Jan Hudec wrote: > > Hello All, > > > > I am planning a project. It's in a design stage. For that project, > > I need a generic value type. > > > > By that I mean, that it should be possible to construct that type from > > any (some reasonable set) other type and be castable to any such type, > > perhaps using dynamic_cast method like RefPtr does. This cast or method > > would throw bad_cast, if the object actualy contained incompatible type. > > > > What I want is to allow: > > > > void foo(int x); > > > > Value a = 1; > > Value b = "string"; > > > > foo(a); // OK, a is an integer > > foo(b); // throws bad_cast, because it's not a number. > > > > Since I will be passing that type to Gtkmm calls a lot, I want it > > convertible to Glib::ValueBase. > > Glib::Value and Glib::ValueBase base are used only rarely in the gtkmm > API, so this would not be a big advantage. I will be accessing object properties by names, for which they are needed. > However, I can see the advantage of reusing the existing code. > > [...] > > // And now the highest madness! The cast operators! > > // FIXME This won't work. It does not do sane checking. > > template <class VT> operator VT() > > { > > Glib::Value<VT> tmp; > > tmp = *this; // FIXME This does not exist! > > return tmp.get(); > > } > > [...] g_value_transform [...] Is there anything I will have to take special care of when using the g_value_transform here? Where do I get the proper C types? Also do you see some way to make this work for enums/flags too? These use Glib::Value_Enum/Glib::Value_Flags instead of Glib::Value, so this template won't do. (If g_value_transform allows transforming enum/flags to integer, than it will work, but won't do the typechecking as good as it could). Thanks. ------------------------------------------------------------------------------- Jan 'Bulb' Hudec <bulb ucw cz>
Attachment:
signature.asc
Description: Digital signature